View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.websocket.api;
20  
21  import java.io.IOException;
22  import java.net.InetSocketAddress;
23  import java.nio.ByteBuffer;
24  import java.util.concurrent.Future;
25  
26  public interface RemoteEndpoint
27  {
28      /**
29       * Send a binary message, returning when all bytes of the message has been transmitted.
30       * <p>
31       * Note: this is a blocking call
32       * 
33       * @param data
34       *            the message to be sent
35       * @throws IOException
36       *             if unable to send the bytes
37       */
38      void sendBytes(ByteBuffer data) throws IOException;
39  
40      /**
41       * Initiates the asynchronous transmission of a binary message. This method returns before the message is
42       * transmitted. Developers may use the returned
43       * Future object to track progress of the transmission.
44       * 
45       * @param data
46       *            the data being sent
47       * @return the Future object representing the send operation.
48       */
49      Future<Void> sendBytesByFuture(ByteBuffer data);
50  
51      /**
52       * Initiates the asynchronous transmission of a binary message. This method returns before the message is
53       * transmitted. Developers may provide a callback to
54       * be notified when the message has been transmitted or resulted in an error.
55       * 
56       * @param data
57       *            the data being sent
58       * @param callback
59       *            callback to notify of success or failure of the write operation
60       */
61      void sendBytes(ByteBuffer data, WriteCallback callback);
62  
63      /**
64       * Send a binary message in pieces, blocking until all of the message has been transmitted. The runtime reads the
65       * message in order. Non-final pieces are
66       * sent with isLast set to false. The final piece must be sent with isLast set to true.
67       * 
68       * @param fragment
69       *            the piece of the message being sent
70       * @param isLast
71       *            true if this is the last piece of the partial bytes
72       * @throws IOException
73       *             if unable to send the partial bytes
74       */
75      void sendPartialBytes(ByteBuffer fragment, boolean isLast) throws IOException;
76  
77      /**
78       * Send a text message in pieces, blocking until all of the message has been transmitted. The runtime reads the
79       * message in order. Non-final pieces are sent
80       * with isLast set to false. The final piece must be sent with isLast set to true.
81       * 
82       * @param fragment
83       *            the piece of the message being sent
84       * @param isLast
85       *            true if this is the last piece of the partial bytes
86       * @throws IOException
87       *             if unable to send the partial bytes
88       */
89      void sendPartialString(String fragment, boolean isLast) throws IOException;
90  
91      /**
92       * Send a Ping message containing the given application data to the remote endpoint. The corresponding Pong message
93       * may be picked up using the
94       * MessageHandler.Pong handler.
95       * 
96       * @param applicationData
97       *            the data to be carried in the ping request
98       * @throws IOException
99       *             if unable to send the ping
100      */
101     void sendPing(ByteBuffer applicationData) throws IOException;
102 
103     /**
104      * Allows the developer to send an unsolicited Pong message containing the given application data in order to serve
105      * as a unidirectional heartbeat for the
106      * session.
107      * 
108      * @param applicationData
109      *            the application data to be carried in the pong response.
110      * @throws IOException
111      *             if unable to send the pong
112      */
113     void sendPong(ByteBuffer applicationData) throws IOException;
114 
115     /**
116      * Send a text message, blocking until all bytes of the message has been transmitted.
117      * <p>
118      * Note: this is a blocking call
119      * 
120      * @param text
121      *            the message to be sent
122      * @throws IOException
123      *             if unable to send the text message
124      */
125     void sendString(String text) throws IOException;
126 
127     /**
128      * Initiates the asynchronous transmission of a text message. This method may return before the message is
129      * transmitted. Developers may use the returned
130      * Future object to track progress of the transmission.
131      * 
132      * @param text
133      *            the text being sent
134      * @return the Future object representing the send operation.
135      */
136     Future<Void> sendStringByFuture(String text);
137 
138     /**
139      * Initiates the asynchronous transmission of a text message. This method may return before the message is
140      * transmitted. Developers may provide a callback to
141      * be notified when the message has been transmitted or resulted in an error.
142      * 
143      * @param text
144      *            the text being sent
145      * @param callback
146      *            callback to notify of success or failure of the write operation
147      */
148     void sendString(String text, WriteCallback callback);
149 
150     /**
151      * @return the batch mode with which messages are sent.
152      * @see #flush()
153      */
154     BatchMode getBatchMode();
155 
156     /**
157      * Set the batch mode with which messages are sent.
158      * 
159      * @param mode
160      *            the batch mode to use
161      * @see #flush()
162      */
163     void setBatchMode(BatchMode mode);
164 
165     /**
166      * Get the InetSocketAddress for the established connection.
167      *
168      * @return the InetSocketAddress for the established connection. (or null, if the connection is no longer established)
169      */
170     InetSocketAddress getInetSocketAddress();
171     
172     /**
173      * Flushes messages that may have been batched by the implementation.
174      * 
175      * @throws IOException
176      *             if the flush fails
177      * @see #getBatchMode()
178      */
179     void flush() throws IOException;
180 }