Skip to content

Commit 0213d1a

Browse files
committed
Added sdupport for WSS - not working, but WS is!
1 parent 480b846 commit 0213d1a

File tree

9 files changed

+106
-62
lines changed

9 files changed

+106
-62
lines changed
4.82 MB
Binary file not shown.
4.29 MB
Binary file not shown.
2.39 MB
Binary file not shown.

package-lock.json

+1-19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
},
2020
"homepage": "https://github.com/jpaulm/javafbp-websockets",
2121
"dependencies": {
22-
"assemblyscript": "^0.18.11",
2322
"javafbp": "^4.1.11",
2423
"snyk": "^1.425.4"
2524
},

src/main/java/com/jpaulmorrison/fbp/components/WebSocketReceive.java

+88-38
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
*/
44
package com.jpaulmorrison.fbp.components;
55

6+
import java.io.BufferedReader;
67
import java.io.File;
78
import java.io.FileInputStream;
9+
import java.io.IOException;
10+
import java.io.InputStream;
11+
import java.io.InputStreamReader;
812

913
/**
1014
* General component to receive sequence of data chunks from a web socket and convert them
@@ -31,24 +35,32 @@
3135
*/
3236

3337
import java.net.InetSocketAddress;
38+
import java.net.URL;
39+
import java.net.UnknownHostException;
40+
import java.nio.ByteBuffer;
3441
import java.security.KeyStore;
42+
import java.util.Collection;
3543
import java.util.Collections;
3644
import java.util.HashMap;
3745
import java.util.LinkedList;
46+
import java.util.concurrent.BlockingQueue;
3847
import java.util.concurrent.atomic.AtomicBoolean;
48+
import java.util.concurrent.atomic.AtomicInteger;
3949

4050
import javax.net.ssl.KeyManagerFactory;
4151
import javax.net.ssl.SSLContext;
4252
import javax.net.ssl.TrustManagerFactory;
4353

4454
import org.java_websocket.WebSocket;
55+
import org.java_websocket.WebSocketImpl;
56+
import org.java_websocket.WebSocketServerFactory;
4557
import org.java_websocket.drafts.Draft_6455;
4658
import org.java_websocket.drafts.Draft;
4759
import org.java_websocket.exceptions.InvalidDataException;
4860
import org.java_websocket.framing.CloseFrame;
49-
5061
import org.java_websocket.handshake.*;
5162
import org.java_websocket.server.DefaultSSLWebSocketServerFactory;
63+
import org.java_websocket.server.DefaultWebSocketServerFactory;
5264
import org.java_websocket.server.WebSocketServer;
5365

5466
import org.slf4j.Logger;
@@ -58,7 +70,7 @@
5870

5971
@InPorts({ @InPort("PORT"), @InPort(value = "OPT", optional = true) })
6072
@OutPort("OUT")
61-
public class WebSocketReceive extends Component {
73+
public class WebSocketReceive extends Component /* WebSocketServer */ {
6274

6375
private InputPort portPort;
6476
private InputPort optPort;
@@ -68,10 +80,14 @@ public class WebSocketReceive extends Component {
6880
HashMap<WebSocket, LinkedList<Packet<?>>> hm = null;
6981

7082
Component comp = null; // JavaFBP Component
83+
MyWebSocketServer test = null;
84+
WebSocketServerFactory wsf = null;
85+
WebSocketServerFactory wsf2 = null;
7186

72-
@Override
87+
//@Override
7388
protected void execute() throws Exception {
74-
boolean wss = false;
89+
boolean wssOpt = false;
90+
7591
comp = this;
7692

7793
killsw = new AtomicBoolean();
@@ -87,23 +103,21 @@ protected void execute() throws Exception {
87103
p = optPort.receive();
88104
if (p != null) {
89105
if (p.getContent().equals("TLS"))
90-
wss = true;
106+
wssOpt = true;
91107
drop(p);
92108
}
93109
optPort.close();
94110

95111
InetSocketAddress isa = new InetSocketAddress("localhost", port);
96-
MyWebSocketServer test = new MyWebSocketServer(isa, new Draft_6455());
97-
// Draft 17 - Hybi 17/RFC 6455 and is currently supported by Chrome16+ and IE10.
98-
// Draft 10 - Hybi 10. This draft is supported by Chrome15 and Firefox6-9.
99-
100-
// test.setReuseAddress(true);
101-
// wss.stop();
112+
test = new MyWebSocketServer(isa, new Draft_6455());
113+
102114
System.out.println("WebSocketServer starting");
103115
putGlobal("WebSocketServer", test);
104-
116+
117+
118+
105119
try {
106-
if (wss) {
120+
if (wssOpt) {
107121
// load up the key store
108122
String STORETYPE = "JKS";
109123
// String KEYSTORE = Paths.get("src", "main", "resources", "keystore.jks")
@@ -144,7 +158,8 @@ protected void execute() throws Exception {
144158
// List<String> protocols = new
145159
// ArrayList<String>(Arrays.asList(engine.getEnabledProtocols()));
146160
// protocols.remove("SSLv3");
147-
DefaultSSLWebSocketServerFactory wsf = new DefaultSSLWebSocketServerFactory(sslContext);
161+
wsf = new DefaultSSLWebSocketServerFactory(sslContext);
162+
//wsf2 = new DefaultWebSocketServerFactory();
148163

149164
test.setWebSocketFactory(wsf);
150165
}
@@ -178,7 +193,7 @@ protected void execute() throws Exception {
178193
e.printStackTrace();
179194
}
180195

181-
test.setConnectionLostTimeout(0);
196+
//test.setConnectionLostTimeout(0);
182197

183198
}
184199

@@ -196,35 +211,59 @@ protected void openPorts() {
196211

197212
}
198213

199-
class MyWebSocketServer extends WebSocketServer {
214+
class MyWebSocketServer extends WebSocketServer {
200215

201216
// private static int counter = 0;
202217

203218
// Component comp = null;
204219

205220
final Logger log = LoggerFactory.getLogger(WebSocketReceive.class);
221+
private BlockingQueue<ByteBuffer> buffers;
222+
private final AtomicInteger queuesize = new AtomicInteger(0);
206223

207224
// public MyWebSocketServer(final int port, final Draft d) throws
208225
// UnknownHostException {
209226
// super(new InetSocketAddress(port), Collections.singletonList(d));
210227
// }
211228

212-
// public MyWebSocketServer(final int port) throws UnknownHostException {
229+
//public MyWebSocketServer(final int port) throws UnknownHostException {
213230
// super(new InetSocketAddress(port));
214231
// }
215232

216233
public MyWebSocketServer(final InetSocketAddress address, final Draft d) {
217234
super(address, Collections.singletonList(d));
218235
}
219236

220-
public MyWebSocketServer(final InetSocketAddress address) {
221-
super(address);
222-
}
237+
//public MyWebSocketServer(final InetSocketAddress address) {
238+
// super(address);
239+
//}
223240

241+
242+
@Override
243+
244+
public ServerHandshakeBuilder onWebsocketHandshakeReceivedAsServer(WebSocket conn, Draft draft,
245+
ClientHandshake request) throws InvalidDataException {
246+
ServerHandshakeBuilder builder = super
247+
.onWebsocketHandshakeReceivedAsServer(conn, draft, request);
248+
//System.out.println(request);
249+
Collection<WebSocket> conns = getConnections();
250+
251+
for (WebSocket ws : conns) {
252+
String s = ws.getResourceDescriptor();
253+
}
254+
//test.setWebSocketFactory(wsf2);
255+
256+
//ServerHandshakeBuilder builder = super.onWebsocketHandshakeReceivedAsServer(conn, draft, request);
257+
return new HandshakeImpl1Server();
258+
//return builder;
259+
}
260+
261+
224262
@Override
225263
public void onOpen(WebSocket conn, ClientHandshake handshake) {
226264
conn.send("Welcome to the server!"); // This method sends a message to the new client
227-
broadcast("new connection: " + handshake.getResourceDescriptor()); // This method sends a message to all
265+
String s = handshake.getResourceDescriptor();
266+
broadcast("new connection: " + s); // This method sends a message to all
228267
// clients connected
229268
System.out.println("new connection to " + conn.getRemoteSocketAddress());
230269
}
@@ -245,29 +284,40 @@ public void onStart() {
245284
System.out.println("server started successfully");
246285
}
247286

248-
@Override
249-
250-
public ServerHandshakeBuilder onWebsocketHandshakeReceivedAsServer(WebSocket conn, Draft draft,
251-
ClientHandshake request) throws InvalidDataException {
252-
System.out.println(request);
253-
String val = request.getFieldValue("Connection");
254-
System.out.println("Connection: " + val);
255-
ServerHandshakeBuilder builder = super.onWebsocketHandshakeReceivedAsServer(conn, draft, request);
256-
return new HandshakeImpl1Server(); // return builder;
257-
}
258-
287+
288+
259289
@Override
260290
public void onWebsocketHandshakeReceivedAsClient(WebSocket conn, ClientHandshake request,
261291
ServerHandshake response) throws InvalidDataException {
262292
// To overwrite
263293
System.out.println(request + ": " + response);
264294
}
265-
266-
295+
296+
297+
298+
267299
/*
268-
* Make sure that the substream comes out of a single port of a single process,
269-
* all together...
270-
*/
300+
public void doDecode(WebSocketImpl ws, ByteBuffer buf) throws InterruptedException {
301+
try {
302+
ws.decode(buf);
303+
} catch (Exception e) {
304+
log.error("Error while reading from remote connection", e);
305+
} finally {
306+
pushBuffer(buf);
307+
}
308+
}
309+
310+
public void pushBuffer(ByteBuffer buf) throws InterruptedException {
311+
if (buffers.size() > queuesize.intValue()) {
312+
return;
313+
}
314+
buffers.put(buf);
315+
}
316+
*/
317+
//
318+
// Make sure that the substream comes out of a single port of a single process,
319+
// all together...
320+
//
271321

272322
@SuppressWarnings("rawtypes")
273323
@Override
@@ -322,7 +372,7 @@ public void onMessage(final WebSocket conn, final String message) {
322372
// outPort.send(p2);
323373

324374
}
325-
375+
326376
}
327377

328378
}

src/main/java/com/jpaulmorrison/fbp/examples/networks/TestWebSockets.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ protected void define() {
4444

4545

4646
initialize(Integer.valueOf(8887), "WSRcv.PORT");
47-
initialize("TLS", "WSRcv.OPT");
47+
//initialize("TLS", "WSRcv.OPT");
4848

4949
connect("WSRcv.OUT", "LBal.IN", 4);
5050
for (int i = 0; i < multiplexNo; i++) {
@@ -58,6 +58,7 @@ protected void define() {
5858
public static void main(final String[] argv) throws Exception {
5959
Network net = new TestWebSockets();
6060
//net.runTimeReqd = false;
61+
System.out.println("Job starting");
6162
net.go();
6263
}
6364

src/main/resources/scripts/chat1.html

+14-2
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@
3232
if (window.WebSocket) {
3333

3434
var portno = "8887";
35-
var chatClient = new WebSocket("ws://localhost:" + portno + "/websocket/chat" );
36-
var message = document.getElementById("message");
35+
var chatClient = new WebSocket("ws://localhost:" + portno + "/websocket/chat");
36+
console.log(chatClient);
37+
//var message = document.getElementById("message");
3738
//var jarfile = document.getElementById("jarfile");
3839
console.log("ready state: " + chatClient.readyState);
3940
console.log('starting client html');
4041

42+
//var x = getKeys(chatClient);
43+
4144
document.addEventListener("keyup", function(event) {
4245
// Number 13 is the "Enter" key on the keyboard
4346
if (event.keyCode === 13) {
@@ -49,6 +52,15 @@
4952
}
5053
});
5154

55+
var getKeys = function(obj){
56+
var keys = [];
57+
for(var key in obj){
58+
keys.push(key);
59+
console.log(key);
60+
}
61+
return keys;
62+
}
63+
5264

5365
chatClient.onmessage = function(evt) {
5466
var container = document.getElementById("container");

src/main/resources/scripts/chat2.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
//var portno = "9003";
3535
var portno = "8887";
36-
var chatClient = new WebSocket("wss://localhost:" + portno + "/websocket/chat" );
36+
var chatClient = new WebSocket("wss://localhost:" + portno + "/websocket/chat");
3737
//alert(chatClient);
3838

3939
var message = document.getElementById("message");

0 commit comments

Comments
 (0)