/**
A simple relay server class powered by TCP and Socket.IO.
Author: Dickson Law
(C) GameGeisha Interactive, 2010-2014
*/
function DualSocket(socket, is_tcp) {
function onMessage(f) {
if (is_tcp) {
socket.on('data', function(data) {
f(data);
});
}
else {
socket.on('message', function(data) {
f(data);
});
}
}
function onClose(f) {
if (is_tcp) {
socket.on('close', f);
}
else {
socket.on('disconnect', f);
}
}
function send(data) {
if (is_tcp) {
socket.write(data);
}
else {
socket.send(data);
}
}
return {
socket : socket,
is_tcp : is_tcp,
onMessage : onMessage,
onClose : onClose,
send : send
};
}
function createServer() {
//Setup basic TCP server functionality
var tcp_server = require('net').createServer();
tcp_server.on('listening', function() {
var address = tcp_server.address();
console.log("TCP server listening at", address.address + ":" + address.port);
});
tcp_server.on('error', function(err) {
console.log("TCP server crashed! Error message:\r\n", err.message);
});
tcp_server.on('connection', function(s) {
});
//Setup basic Socket.IO server functionality
var sio_proxy = require('http').createServer();
var sio_server = require('socket.io').listen(sio_proxy);
sio_proxy.on('error', function(err) {
console.log("Socket.IO server crashed! Error message:\r\n", err.message);
});
sio_proxy.on('close', function() {
console.log("Socket.IO server shut down successfully.");
});
//Listen
function listen(tcp_port, sio_port, ip) {
if (tcp_port != null) {
tcp_server.listen(tcp_port, ip);
}
if (sio_port != null) {
sio_proxy.listen(sio_port, ip);
console.log("Socket.IO server listening at", ip + ":" + sio_port);
}
}
//On Connection
function onConnection(f) {
tcp_server.on('connection', function(s) {
f(new DualSocket(s, true));
});
sio_server.sockets.on('connection', function(s) {
f(new DualSocket(s, false));
});
}
return {
tcp_server : tcp_server,
sio_server : sio_server,
listen : listen,
onConnection : onConnection
};
}
module.exports.createServer = createServer;
TCP 클라이언트 튕기면 서버도 터지는데..
일단 process.on('uncaughtException', callback);로 임시처리는 가능함
function onConnection(f) 이부분에서 tcp_server 명세 읽어보시고 핸들러 추가하면 될것같음
disconnect말고 error 이런거 있을듯
근본적인 해결은 못 했지만 말대로 임시처리 성공함 ㄳㄳ