var WebSocketServer = require('ws').Server
, wss = new WebSocketServer({port: 8080});
wss.on('connection', function(ws) {
ws.on('message', function(message) {
console.log('received: %s', message);
});
ws.send('something');
});
The one main problem that I see right off is that you rolled your onmessage method into your onconnection method.
Those two need to be separate functions, like:
var WebSocketServer = require('ws').Server, wss = new WebSocketServer({port: 8080});
wss.on('connection', function(ws) {
ws.send('Connected.');
});
ws.on('message', function(message) {
console.log('received: %s', message);
ws.send('Message received.');
});
[/code:2jwc88p6]
You also need to make sure that you have the "Access-Control-Allow-Origin" header set to '*' because Construct is very particular about security, and your websockets will not work if that header is not set on the server side.
See this example for more info: [url=http://usualcarrot.com/nodejs-and-websocket-simple-chat-tutorial]http://usualcarrot.com/nodejs-and-webso ... t-tutorial[/url]
You can see the compartmentalization in my Java WebSocket server code below:
[code:2jwc88p6]
public GalaxyChatEndPoint(){
mLog = new MessageLogManager(filePath, fLogger, SP);
}
/**
* Callback hook for Connection open events. This method will be invoked when a
* client requests for a WebSocket connection.
* @param userSession the userSession which is opened.
*/
@OnOpen
public void onOpen(Session userSession){
try{
userSession.setMaxIdleTimeout(600000);//10 mins
sessionKey = ((PrincipalWithSession) userSession.getUserPrincipal()).getSessionKey();
gameSession = cache.get(sessionKey.getKey());
connections.put(sessionKey, userSession);
if(gameSession==null)
broadcast("<p>gumshoe joined chat.</p>");
else
broadcast(String.format("<p>%s%s</p>", gameSession.getDisplayName()," joined chat."));
}catch(Exception e){
fLogger.error(Errors.err2String(e));
try {
connections.get(sessionKey).close();
connections.remove(sessionKey);
} catch (IOException e1){
fLogger.error(Errors.err2String(e1));
}
}
}
/**
* Callback hook for Connection close events. This method will be invoked when a
* client closes a WebSocket connection.
* @param userSession the userSession which is opened.
*/
@OnClose
public void onClose() {
try{
if(gameSession==null)
broadcast("<p>gumshoe left chat.</p>");
else
broadcast(String.format("<p>%s%s</p>", gameSession.getDisplayName()," left chat."));
connections.get(sessionKey).close();
connections.remove(sessionKey);
}catch(Exception e){
fLogger.error(Errors.err2String(e));
try {
if(connections.get(sessionKey)!=null)connections.get(sessionKey).close();
if(connections.get(sessionKey)!=null)connections.remove(sessionKey);
} catch (IOException e1){
fLogger.error(Errors.err2String(e1));
}
}
}
/**
* Callback hook for Message Events. This method will be invoked when a client
* sends a message.
* @param message The text message
* @param userSession The session of the client
*/
@OnMessage
public void onMessage(String messageJson) {
try{
Date now = new Date();
String dateFmt = new SimpleDateFormat("EEE MMM HH:mm:ss z yyyy").format(now);
Message message = Message.fromJson(messageJson, gameSession);
globalMessageLog.put(currentMessageId.incrementAndGet(), message);
if(message.getDestination().getDestType()==DestinationType.GALAXY)
if(gameSession==null)
broadcast(String.format(galaxyChatFramework, dateFmt, "gumshoe", message.getContent()));
else
broadcast(String.format(galaxyChatFramework, dateFmt, gameSession.getDisplayName(), message.getContent()));
// this may need to be reworked... perhaps to a raw message number system
Date time1159pm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(new SimpleDateFormat("yyyy-MM-dd").format(now) + " 23:59:58");
if(now.after(time1159pm)){
if(mLog.writeFile(globalMessageLog, now)){
globalMessageLog.clear();
currentMessageId.set(0);
}
}
}catch(Exception e){
fLogger.error(Errors.err2String(e));
try {
connections.get(sessionKey).close();
connections.remove(sessionKey);
} catch (IOException e1){
fLogger.error(Errors.err2String(e1));
}
}
}
private static void broadcast(String msg) throws Exception {
for(Session client : connections.values()){
synchronized (client) {
if(client.isOpen()) client.getBasicRemote().sendText(msg);
}
}
}
[/code:2jwc88p6]