/**

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 클라이언트 튕기면 서버도 터지는데..