|
3 | 3 | import java.io.IOException; |
4 | 4 | import java.io.InputStream; |
5 | 5 | import java.io.OutputStream; |
| 6 | +import java.lang.ref.WeakReference; |
6 | 7 | import java.net.InetSocketAddress; |
7 | 8 | import java.net.Proxy; |
8 | 9 | import java.net.Socket; |
@@ -46,7 +47,8 @@ public abstract class WebSocketClient extends WebSocketAdapter implements Runnab |
46 | 47 |
|
47 | 48 | private Proxy proxy = Proxy.NO_PROXY; |
48 | 49 |
|
49 | | - private Thread writeThread; |
| 50 | + private WeakReference<Thread> readThread; |
| 51 | + private WeakReference<Thread> writeThread; |
50 | 52 |
|
51 | 53 | private Draft draft; |
52 | 54 |
|
@@ -155,10 +157,11 @@ public void setTcpNoDelay( boolean tcpNoDelay ) { |
155 | 157 | * Initiates the websocket connection. This method does not block. |
156 | 158 | */ |
157 | 159 | public void connect() { |
158 | | - if( writeThread != null ) |
| 160 | + if( readThread != null ) |
159 | 161 | throw new IllegalStateException( "WebSocketClient objects are not reuseable" ); |
160 | | - writeThread = new Thread( this ); |
161 | | - writeThread.start(); |
| 162 | + Thread reader = new Thread( this ,"WebsocketReadThread"); |
| 163 | + reader.start(); |
| 164 | + readThread = new WeakReference<Thread>( reader ); |
162 | 165 | } |
163 | 166 |
|
164 | 167 | /** |
@@ -230,8 +233,9 @@ public void run() { |
230 | 233 | return; |
231 | 234 | } |
232 | 235 |
|
233 | | - writeThread = new Thread( new WebsocketWriteThread() ); |
234 | | - writeThread.start(); |
| 236 | + Thread write = new Thread( new WebsocketWriteThread() ); |
| 237 | + write.start(); |
| 238 | + writeThread = new WeakReference<Thread>( write ); |
235 | 239 |
|
236 | 240 | byte[] rawbuffer = new byte[ WebSocketImpl.RCVBUF ]; |
237 | 241 | int readBytes; |
@@ -328,8 +332,10 @@ public final void onWebsocketOpen( WebSocket conn, Handshakedata handshake ) { |
328 | 332 | */ |
329 | 333 | @Override |
330 | 334 | public final void onWebsocketClose( WebSocket conn, int code, String reason, boolean remote ) { |
331 | | - if( writeThread != null ) |
332 | | - writeThread.interrupt(); |
| 335 | + if( writeThread != null && writeThread.get() != null) |
| 336 | + writeThread.get().interrupt(); |
| 337 | + if( readThread != null && readThread.get() != null) |
| 338 | + readThread.get().interrupt(); |
333 | 339 | try { |
334 | 340 | if( socket != null ) |
335 | 341 | socket.close(); |
|
0 commit comments