function mylog(data) //log { // console.log(data); }; function mylog2(data) //log { console.log(data); }; var eylj=60*1000*30;//恶意链接时间 var tcpinit = 10000; var httpinit = 10000; var constcount=0; //var constcountinit=10; var constcountinit=9989998; constcount=constcountinit+tcpinit; var rf = require("fs"); var data1 = rf.readFileSync("port.txt", "utf-8"); var obj = JSON.parse(data1); var oo=obj[0]; var ll; for (var i = 0; i < obj.length; i++) { // var oo = obj[i]; // server_heihu(oo.tcpport, oo.httpport); }; function $() { return document.getElementById(arguments[0]); } var memo1=$('txtChatMain'); var title1=$('btnChatSend'); var countmemo1=0; function clearmsg() { memo1.value = '黑狐服务器2016'+ '\n'; }; function logmsg(msg) { memo1.value += msg + '\n'; countmemo1++; if (countmemo1>1000) { clearmsg(); } }; function logtitle(msg) { title1.value = msg ; }; Array.prototype.indexOf = function(val) { for (var i = 0; i < this.length; i++) { if (this[i] == val) return i; } return - 1; }; Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index > -1) { this.splice(index, 1); }; return index; }; function server_findip(str) //查找ip { var j = 0; var x; for (var i = 0; i < str.length; i++) { x = parseInt(str[i]); if (!isNaN(x)) // if (str[i]=='1') { j = i; break; } } return str.substr(j, str.length - j); } //--------------------------- function clientleave(mode, conn, data) //tcp { webserver.sendText('@toleave1:' + conn.ljid); }; function clientlogin(mode, conn, data) //tcp { webserver.sendText('@tologin1:' + conn.ljid + ':'); }; function httprev_todo(mode, conn, data) // http { webserver.sendText('@toserver' + ':' + conn.ljid + ':' + data); }; function tcprev_todo(mode, conn, data) ////tcp { webserver.sendText('@toserver' + ':' + conn.ljid + ':' + conn.ip + ':' + data); }; function myfind(str,cha,num){//0是第一次出现 var x=str.indexOf(cha); for(var i=0;i 99999) { httpinit = 10000; } //判断是GET/POST请求 if (request.method == "GET") { var params = []; params = url.parse(request.url).query; mylog("==="); mylog(params); //console.log(params.query); mylog(request.url); /*params['fruit'] = compute(params); params['ljid'] = response.ljid; var pathname = url.parse(request.url).pathname; params['pathname'] = pathname; params['url'] = request.url; var arg1 = url.parse(request.url, true).query; //arg1 => {name:'a',id:'5'} var str = JSON.stringify(arg1); console.log("ljid " + response.ljid); console.log("url " + request.url); console.log("Request for1 " + str); console.log("name0 = " + arg1.name);*/ //var name = query.parse(str).name; //name => a //console.log("name = "+name); if (webserver == null) { response.write("webserve-服务器未工作" + url1); response.end(); lists_all_http[response.ljid]=null; } else { httprev_todo('http', response, decodeURI(params)); } } else { var postdata = ""; request.addListener("data", function(postchunk) { postdata += postchunk; }); //POST结束输出结果 request.addListener("end", function() { //var params = query.parse(postdata); //params['fruit'] = compute(params); //params['ljid'] = response.ljid; mylog("收到:post " + postdata); if (webserver == null) { response.write("webserve-服务器未工作"); response.end(); lists_all_http[response.ljid]=null; } else { httprev_todo('http', response, postdata); } }) } } catch(err) { mylog2("httpserver:" + err); } }; //计算 var compute = function(params) { switch (params['type']) { case "add": return parseFloat(params['num']) + parseFloat(params['num1']); break; case "subtract": return parseFloat(params['num']) - parseFloat(params['num1']); break; case "multiplication": return parseFloat(params['num']) * parseFloat(params['num1']); break; case "division": return parseFloat(params['num']) / parseFloat(params['num1']); break; }; }; //开启服务在127.0.0.1:8080 //server_heihu(oo.tcpport, oo.httpport); var httpport=oo.httpport; var tcpport=oo.tcpport; if (httpport) { http.createServer(httpserver).listen(httpport); mylog("http Server start!:" + httpport); }; //http2.createServer(server).listen(4322); var ws = require("nodejs-websocket"); mylog("开始建立连接..."); var game1 = null, game2 = null, game1Ready = false, game2Ready = false; var webserver = null; var myid = 0; if (tcpport > 0) { var tcpserver = ws.createServer(function(conn) { try { // mylog(conn.socket); // mylog(conn.socket.remoteAddress); // mylog(conn.socket.remotePort); //console.log("Headers对象"); //console.log(conn.headers); var er=0; var ip = server_findip(conn.socket.remoteAddress); conn.ip = ip; er=1; var ok=-1; for (var i1=0;i1 constcount) { tcpinit = 10000; } mylog('tcpinit1:'+tcpinit); if ((typeof(lists_all['tcp_' + tcpinit])=="undefined")||(lists_all['tcp_' + tcpinit]==null)) { mylog(lists_all['tcp_' + tcpinit]); mylog('tcpinit2:'+tcpinit); ok=tcpinit; break; } } if (ok==-1) { mylog2('连接已经满了:'+tcpinit); conn.isserver = -1;//没进队列 conn.close(1000); return; } er=2; conn.ljid = 'tcp_' + tcpinit; conn.isserver = 0; conn.contime=(new Date()).getTime(); conn.readpack=0;//还没有包 lists.push(conn); lists_all[conn.ljid]=conn; mylog("New connection ---" + conn.ip+'/'+ conn.ljid+'/'+tcpinit); er=3; if (webserver) { clientlogin('tcp', conn); }; conn.on("text", function(str) { try { mylog("收到的信息为0:" + str); this.readpack=1;//有包了 if (str === "dfw19770109") { this.isserver = 1; webserver = this; lists.remove(this); lists_all[this.ljid]=null; delete lists_all[this.ljid]; this.ljid = 'tcp_' + 0; //this.sendText("webserver-dfw19770109"); return; }; if (this == webserver) //处理完发来的 { mylog("收到的信息为 从server来:" + str); serverrev_fromdo('server', 'id', str); } else { if (webserver == null) { this.sendText("webserve-服务器未工作"); } else { mylog("转发给逻辑服务器:" + str); tcprev_todo('tcp', this, str); } } } catch(err) { mylog2("text:" + err); } //lists_all_http[response.ljid] // if (game1Ready && game2Ready) { // game2.sendText(str); // } // // conn.sendText(str) }); conn.on("close", function(code, reason) { if (conn.isserver==-1) { mylog2('连接已经满了收包:'); return; } try { if (this.isserver == 1) { webserver = null; mylog("逻辑服务器关闭连接"); } else { var index = lists.remove(this); if (index > -1) { if (webserver) { clientleave('tcp', this); }; }; //this.socket=null; var i9=this.ljid; lists_all[i9]=null; delete lists_all[i9]; //conn=null; mylog("关闭连接"+i9); }; } catch(err) { mylog2("close:" + err); } }); conn.on("error", function(code, reason) { // try { // if (this.isserver == 1) { // webserver = null; // mylog("逻辑服务器错误关闭连接"); // } else { // var index = lists.remove(this); // if (index > -1) { // if (webserver) { // clientleave('tcp', this); // }; // }; //this.socket=null; // var i9=this.ljid; // lists_all[i9]=null; // delete lists_all[i9]; //this=null; // mylog("异常关闭"+i9); // }; // } catch(err) { // mylog2("error:" + err); // } }); } catch(err) { mylog2("newsocket:" + err+" "+er); } }).listen(tcpport); mylog("Socket建立完毕:" + tcpport); }; function broadcast(server, msg) { try { server.connections.forEach(function(conn) { if (conn.readpack==1) {conn.sendText(msg)}; }) } catch(err) { mylog2("broadcast:" + err); } } //广播 var maxsocketcount=0; var maxsocketcounttcp=0; function dotime() { try { mylog("Socket群发1111"); if (webserver != null) { // return; } var newDate=new Date(); if (maxsocketcounttcp 0) { mylog("群发,检测时间"); for (var i = 0; i < lists.length; i++) { if (lists[i].readpack==0) { if (mytime-lists[i].contime>eylj) { mylog2("Socket恶意链接"); lists[i].close(1001); } } // lists[i].sendText(i + ' :message server! ' + lists.length); } } } catch(err) { mylog2("dotime:" + err); } }; if (tcpport > 0) { var interval = setInterval(dotime, 6000); }; var lists = []; var lists_all = {}; var lists_all_http = {}; var newDate = new Date(); logmsg(newDate.toLocaleDateString()); //server_heihu(5414,4321); //server_heihu(5415,4322);