Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var net = require('net'),
- dgram = require('dgram');
- var serverport = 10052,
- maxplayers = 32,
- gamemode = 2,
- maxscore = 10,
- servername = "djazz's |||Node Server",
- lvlFile = 'Battle2.j2l';
- var players = [
- {
- playerID: 0,
- name: 'Server',
- fur: [16,24,32,40],
- character: 1
- }
- ];
- var sockets = [null];
- var listserver = "91.121.144.59";
- var ls = net.createConnection(10054, listserver);
- ls.on('connect', function () {
- var port = new Buffer(2);
- port[1] = parseInt(serverport / 256);
- port[0] = serverport - (port[1]*256);
- var lsres = new Buffer(42);
- for(var i=0; i < lsres.length; i+=1) {
- lsres[i] = 0;
- }
- port.copy(lsres, 0);
- var servname = new Buffer(servername);
- servname.copy(lsres, 2);
- lsres[2+33] = players.length;
- lsres[2+33+1] = maxplayers;
- lsres[2+33+2] = gamemode;
- var ver = new Buffer("21 ");
- ver.copy(lsres, 2+33+3);
- ls.write(lsres);
- ls.write(new Buffer("\x00\x01"));
- console.log(lsres);
- });
- ls.on('message', function (data) {
- console.log("Listserver");
- console.log(data);
- });
- var server = net.createServer(function (socket) {
- socket.on('connect', function () {
- console.log("Someone connected");
- });
- socket.on('data', function (data) {
- console.log("Got:");
- console.log(data);
- switch(data[1]) {
- case 0x0E:
- var sockid = sockets.length;
- var playeramount = data[2];
- var packetsize = data.length;
- var i = 3;
- sockets[sockid] = socket;
- while(i < packetsize) {
- var pid = data[i++];
- var teamAndChar = data[i++];
- var furcolors = [data[i++], data[i++], data[i++], data[i++]];
- var pname = "";
- while(data[i] != undefined) {pname+=String.fromCharCode(data[i++]);if(data[i]==0) break;}
- i+=1;
- players[sockid] = {playerID: pid, name: pname, fur: furcolors, character: teamAndChar & 3};
- break;
- }
- console.log(players);
- var toSend = "y\x12"+String.fromCharCode(players.length);
- for(var i=0; i < players.length; i+=1) {
- if(!players[i]) continue;
- toSend+=String.fromCharCode(i)+String.fromCharCode(players[i].playerID)+String.fromCharCode(players[i].character);
- for(var f=0; f < 4; f+=1) {
- toSend+=String.fromCharCode(players[i].fur[f]);
- }
- toSend+=players[i].name;
- toSend+="\x00";
- }
- toSend+="\x00";
- sendtcp(socket, new Buffer(toSend));
- break;
- case 0x0F:
- var sockid = sockets.length;
- var toSend = new Buffer("y\x10"+String.fromCharCode(sockid)+String.fromCharCode(sockid)+String.fromCharCode(lvlFile.length)+lvlFile+"yyyy"+"yyyy"+String.fromCharCode(gamemode)+String.fromCharCode(maxscore));
- var crc = new Buffer(8);
- crc[0] = 0x66;
- crc[1] = 0x5F;
- crc[2] = 0xB6;
- crc[3] = 0x96;
- crc[4] = 0xDA;
- crc[5] = 0x75;
- crc[6] = 0x82;
- crc[7] = 0xE1;
- crc.copy(toSend, 5+lvlFile.length);
- sendtcp(socket, toSend);
- sendtcp(socket, new Buffer("y\x13"));
- break;
- case 0x15:
- sendtcp(socket, new Buffer("y\x0D\x06\x01"+"21 "));
- break;
- case 0x1B:
- sendChat(socket, 0, "I got chat from "+players[data[2]].name);
- console.log(data.toString());
- break;
- }
- });
- socket.on('end', function () {
- console.log("Someone left");
- var index = sockets.indexOf(socket);
- if(index > 0) {
- delete sockets[index];
- delete players[index];
- }
- console.log(players);
- });
- socket.on('error', function (err) {
- console.log(err);
- });
- });
- server.listen(serverport);
- var udp = dgram.createSocket('udp4');
- udp.on('message', function (data, rinfo) {
- //console.log(rinfo);
- //console.log(data);
- switch(data[2]) {
- case 3:
- var toSend = new Buffer("yy\x04"+"yyyyy"+String.fromCharCode(gamemode));
- data.copy(toSend, 3, 3, 5+3);
- sendudp(toSend, rinfo.address, rinfo.port);
- break;
- case 5:
- var toSend = new Buffer("yy\x06"+String.fromCharCode(data[3])+"\x00\x00\x00\x00"+"21 "+"\x00"+String.fromCharCode(players.length)+String.fromCharCode(gamemode)+String.fromCharCode(maxplayers)+String.fromCharCode(servername.length)+servername+"\x00\x00");
- sendudp(toSend, rinfo.address, rinfo.port);
- break;
- }
- });
- udp.on('listening', function () {
- console.log(udp.address());
- });
- udp.bind(serverport);
- function udpchecksum(buf) {
- var x = 1, y = 1, size = buf.length;
- for(var i = 2; i < buf.length; i+=1) {
- x += buf[i];
- y += x;
- }
- buf[0] = x % 251;
- buf[1] = y % 251;
- return buf;
- }
- function sendudp(buf, adr, port) {
- buf = udpchecksum(buf);
- udp.send(buf, 0, buf.length, port, adr);
- }
- function sendtcp(stream, buf) {
- buf[0] = buf.length;
- stream.write(buf);
- console.log("Sent:");
- console.log(buf);
- }
- function sendChat(stream, from, msg) {
- var toSend = new Buffer("y\x1B"+String.fromCharCode(from)+"\x20"+msg);
- sendtcp(stream, toSend);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement