1 package com.ericsson.research.transport.ws.spi;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 import java.io.IOException;
37 import java.io.InputStream;
38 import java.io.OutputStream;
39 import java.net.InetSocketAddress;
40 import java.net.Socket;
41
42 import com.ericsson.research.transport.ws.WSListener;
43
44 public class WSSocketEndpoint extends WSAbstractProtocolWrapper {
45
46 protected Socket socket;
47 protected OutputStream os;
48
49 public WSSocketEndpoint(WSAbstractProtocol protocol, WSListener listener) {
50 super(protocol, listener);
51 }
52
53 public WSSocketEndpoint(Socket socket, WSAbstractProtocol protocol, WSListener listener) {
54 super(protocol, listener);
55 this.socket = socket;
56 this.startListenerThread(socket);
57 }
58
59 private void startListenerThread(final Socket socket) {
60 new Thread() {
61 public void run() {
62 byte[] data = new byte[4096];
63 try {
64 InputStream is = socket.getInputStream();
65 for(;;) {
66 int length = is.read(data);
67 if(length == -1) {
68 WSSocketEndpoint.this.notifyDisconnected();
69 return;
70 }
71 WSSocketEndpoint.this.notifySocketData(data, length);
72 }
73 } catch (Exception e) {
74 WSSocketEndpoint.this.notifyError(e);
75 }
76 }
77 }.start();
78 }
79
80 public void open() throws IOException {
81 this.socket = new Socket(this.protocol.host, this.protocol.port);
82 this.startListenerThread(this.socket);
83 this.protocol.open();
84 }
85
86 public OutputStream getRawOutput() throws IOException {
87 if(this.os == null)
88 this.os = this.socket.getOutputStream();
89 return this.os;
90 }
91
92 public void forceClose() {
93 try {
94 if(this.socket!=null)
95 this.socket.close();
96 } catch (IOException e) {}
97 this.notifyDisconnected();
98 this.os = null;
99 this.socket = null;
100 }
101
102 public String toString() {
103 return "Socket ("+this.protocol+")";
104 }
105
106 public InetSocketAddress getLocalSocketAddress()
107 {
108 return (InetSocketAddress) this.socket.getLocalSocketAddress();
109 }
110
111 public InetSocketAddress getRemoteSocketAddress()
112 {
113 return (InetSocketAddress) this.socket.getRemoteSocketAddress();
114 }
115
116 }