public void ShutDown(CmdPacket packet) { BroadCastInErrorCase = packet; Server.Server.Close(); Globals.NetworkServerThread.Abort(); isOnline = false; }
void OnGUI() { GUILayout.Label("Ping:" + m_rtt + ",Pos:" + m_game.m_ball.position + ",Vel:" + m_game.m_ball.rigidbody.velocity); GUILayout.Label(m_state.ToString()); if (m_state == State.ST_Disconnected) { if (GUILayout.Button("Connect")) { //Security.PrefetchSocketPolicy("127.0.0.1", 5001); m_client.Connect("127.0.0.1", 5001); } } else { if (GUILayout.Button("Disconnect")) { m_client.Close(); m_state = State.ST_Disconnected; } switch (m_state) { case State.ST_Connected: if (GUILayout.Button("Automatch")) { //send automatch CmdPacket packet = new CmdPacket(); packet.WriteUShort(Proto.C_AutoMatch); send(packet); m_state = State.ST_WaitingToMatch; } break; case State.ST_WaitingToMatch: if (GUILayout.Button("Cancel Match")) { CmdPacket packet = new CmdPacket(); packet.WriteUShort(Proto.C_UAutoMatch); send(packet); m_state = State.ST_Connected; } break; case State.ST_GameInit: { if (GUILayout.Button("Ready")) { CmdPacket packet = new CmdPacket(); packet.WriteUShort(Proto.C_GameReady); send(packet); m_state = State.ST_WaitingToStart; } break; } case State.ST_WaitingToStart: case State.ST_GameRunning: break; } } }
private void EvaluatorAVH(CmdResult result) { AirFlights afs = new AirFlights(); afs.Load(result.Data); result.Airflights = afs; string resultdate = result.GetAvhdate(); string cmdate = ec.ParentCmdPacket.GetAvhdate(); if (resultdate == cmdate) { if (afs.Count > 5) { CmdPacket c = new CmdPacket("PN", CmdCB, false, new CmdResultEvaluator(EvaluatorAVH), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } } else { result.DiscardResult = true; } }
private void DealwithCmd() { string s = GetCommandLine().Trim(); if (s != "") { if (s.ToUpper().StartsWith("PRINT")) { string[] splits = Regex.Split(s, @"\s{1,}"); if (splits.Length != 3) { throw new Exception("PRINT格式不对"); } Packet c = new PrintPacket(splits[1], splits[2], CmdCB); c.EcChannel = ec; c.Send(); } else { CmdPacket c = new CmdPacket(s, CmdCB); c.EcChannel = ec; c.Send(); } } else { richTextBox1.Text += "\r\n" + "请检查命令格式!"; richTextBox1.Text += "\r\n" + (char)9632; } }
/// <summary> /// 在多个线程内部循环调用 /// </summary> public void ProcessCmdPackets(Queue <CmdPacket> ls) { //dictInPackets.Values值的个数可能会变化,每次处理先保存好最大个数 //同时给出20个冗余数量 int maxCount = dictInPackets.Values.Count + 20; for (int n = 0; n < maxCount; n++) { TCPInPacket tcpInPacket = GetNextTcpInPacket(n); //这意味着列表数据包变少了 if (null == tcpInPacket) { break; } ls.Clear(); if (tcpInPacket.PopCmdPackets(ls)) //判断是否取到了指令列表 { try { while (ls.Count > 0) { CmdPacket cmdPacket = ls.Dequeue(); //接收到了完整的命令包 TCPOutPacket tcpOutPacket = null; TCPProcessCmdResults result = TCPProcessCmdResults.RESULT_FAILED; result = TCPCmdHandler.ProcessCmd(this, tcpInPacket.CurrentSocket, tcpClientPool, tcpRandKey, tcpOutPacketPool, cmdPacket.CmdID, cmdPacket.Data, cmdPacket.Data.Length, out tcpOutPacket); if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket) { //向登陆客户端返回数据 socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket); } else if (result == TCPProcessCmdResults.RESULT_FAILED)//解析失败, 直接关闭连接 { if (cmdPacket.CmdID != (int)TCPGameServerCmds.CMD_LOG_OUT) { LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket))); } SysConOut.WriteLine("========================ProcessCmdPackets CloseSocket================"); // Console.WriteLine("========================ProcessCmdPackets CloseSocket================"); //这儿需要关闭链接--->这样关闭对吗? socketListener.CloseSocket(tcpInPacket.CurrentSocket); break; } } } finally { //处理结束之后设置相关标志位 tcpInPacket.OnThreadDealingComplete(); } } } }
public void GetFlights(string s) { CmdPacket c = new CmdPacket(s, CmdCB, new CmdResultEvaluator(EvaluatorAVH), null); c.EcChannel = ec; c.Send(); //ec.SendCmd(c); }
public void RTWithNMAndPrice(string s) { CmdPacket c = new CmdPacket(s, CmdCB, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; c.Send(); //ec.SendCmd(c); }
public void sendInput(float x, float y) { CmdPacket packet = new CmdPacket(); packet.WriteUShort(Proto.C_GameShot); packet.WriteFloat(x); packet.WriteFloat(y); send(packet); }
private void EvaluatorTeamNM(CmdResult result) { if (Regex.IsMatch(ec.CurrentCmdPacket.CmdString.ToUpper().Trim(), "RT[0-9A-Z]{5}")) { if (Regex.IsMatch(result.Data, @"\sNM([0-9]{1,3})\s")) { result.DiscardResult = true; CmdPacket c = new CmdPacket("RTN", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } else { CmdPacket c = new CmdPacket("PAT:A", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } } else if (ec.CurrentCmdPacket.CmdString.ToUpper().Trim() == "RTN") { if (Regex.IsMatch(ec.TempResultBuffer + result.Data, @"NM([0-9]{1,3}).*?\1\.")) { CmdPacket c = new CmdPacket("PAT:A", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } else { CmdPacket c = new CmdPacket("PN", CmdCB, true, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } } else if (ec.CurrentCmdPacket.CmdString.ToUpper().Trim() == "PN") { if (Regex.IsMatch(ec.TempResultBuffer + result.Data, @"NM([0-9]{1,3}).*?\1\.")) { CmdPacket c = new CmdPacket("PAT:A", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } else { ec.CurrentCmdPacket.Repeat = true; } } else if (ec.CurrentCmdPacket.CmdString.ToUpper().Trim() == "PAT:A") { if (!result.Data.ToUpper().Contains("TOTAL:")) { CmdPacket c = new CmdPacket("PAT:", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } } }
public void BroadCast(CmdPacket cmd, byte[] buffdata) // check later { //byte[] _cmd = new byte[] { (byte)cmd }; byte[] newbuff = new byte[buffdata.Length + 1]; newbuff[0] = (byte)cmd; Buffer.BlockCopy(buffdata, 0, newbuff, 1, buffdata.Length); //var buff = _cmd.Concat(buffdata).ToArray<byte>(); Globals.Clients.ForEach(c => SendCmd(c.tcpclient, newbuff)); }
void Update() { if (m_state == State.ST_Start) { m_state = State.ST_Running; m_time = 0; m_input.m_enabled = true; if (m_bottom) { m_other.position = m_tranUp.position; m_other.rotation = m_tranUp.rotation; Camera.main.transform.position = m_tranBottom.position; Camera.main.transform.rotation = m_tranBottom.rotation; } else { m_other.position = m_tranBottom.position; m_other.rotation = m_tranBottom.rotation; Camera.main.transform.position = m_tranUp.position; Camera.main.transform.rotation = m_tranUp.rotation; } m_ball.position = m_tranBall.position; m_ball.rotation = m_tranBall.rotation; } if (m_state == State.ST_Running) { if (m_time > m_gameTime) { m_state = State.ST_End; CmdPacket packet = new CmdPacket(); //packet.WriteUShort(Proto.C_AutoMatch); //m_client.m_client.Send(packet); } m_time += Time.deltaTime; //同步位置和速度 if (m_bSer) { //if (Time.realtimeSinceStartup - m_lstSyncTime > Time.deltaTime) { CmdPacket packet = new CmdPacket(); packet.WriteUShort(Proto.Synch_Pos); packet.WriteUInt64(TimeMgr.getTimeStampMicro()); packet.WriteFloat(m_ball.position.x); packet.WriteFloat(m_ball.position.z); packet.WriteFloat(m_ball.rigidbody.velocity.x); packet.WriteFloat(m_ball.rigidbody.velocity.z); m_client.send(packet); m_lstSyncTime = Time.realtimeSinceStartup; } } } }
public void ProcessCmdPackets(Queue <CmdPacket> ls) { int maxCount = this.dictInPackets.Values.Count + 20; for (int i = 0; i < maxCount; i++) { TCPInPacket tcpInPacket = this.GetNextTcpInPacket(i); if (null == tcpInPacket) { break; } ls.Clear(); if (tcpInPacket.PopCmdPackets(ls)) { try { while (ls.Count > 0) { CmdPacket cmdPacket = ls.Dequeue(); TCPOutPacket tcpOutPacket = null; TCPProcessCmdResults result = TCPCmdHandler.ProcessCmd(this, tcpInPacket.CurrentSocket, this.tcpClientPool, this.tcpRandKey, this.tcpOutPacketPool, cmdPacket.CmdID, cmdPacket.Data, cmdPacket.Data.Length, out tcpOutPacket); if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket) { this.socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket, true); } else { if (result == TCPProcessCmdResults.RESULT_FAILED) { if (cmdPacket.CmdID != 22) { LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket, false)), null, true); } this.socketListener.CloseSocket(tcpInPacket.CurrentSocket, ""); break; } if (result == TCPProcessCmdResults.RESULT_DATA_CLOSE && null != tcpOutPacket) { this.socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket, true); tcpInPacket.CurrentSocket.DelayClose = 250; } } } } finally { tcpInPacket.OnThreadDealingComplete(); } } } }
void FixedUpdate() { if (m_state != State.ST_Disconnected) { if (Sys_GetTime() - m_lstSendTime > 10 * 1000) { CmdPacket packet = new CmdPacket(); packet.WriteUShort(Proto.Keep_Alive); packet.WriteUInt(Sys_GetTime()); send(packet); } if (Sys_GetTime() - m_lstReadTime > 30 * 1000) { //dead } } }
private void Networker() { Server.Start(); Heart.Beat(); this.isOnline = true; BroadCastInErrorCase = CmdPacket.ServerRestart; Log.Write("NetworkServer started, Bound at: {0}", Server.LocalEndpoint.ToString()); try { while (this.isOnline) { TcpClient NewClient = Server.AcceptTcpClient(); if (Globals.Shield.IsBlocked(NewClient)) { Globals.NetworkServer.SendCmd(NewClient, CmdPacket.DisconnectIsBanned); NewClient.Close(); continue; } if (!isClientWithSameIP(NewClient)) { Log.Write("New Client incomming Connection at: {0}", getIP(NewClient)); new Client(NewClient); } else { Log.Write("New Client incomming Connection with duplicated IPAddress at: {0} - Blocked!", getIP(NewClient)); SendCmd(NewClient, CmdPacket.DisconnectTooManyIPs); NewClient.Close(); //continue; } } PutOff(); } catch// (ThreadAbortException) { PutOff(); } }
public void SendCmd(TcpClient client, CmdPacket cmd) { SendCmd(client, new byte[] { (byte)cmd }); }
public void BroadCast(CmdPacket cmd) { byte[] _cmd = new byte[] { (byte)cmd }; Globals.Clients.ForEach(c => SendCmd(c.tcpclient, _cmd)); }
public void send(CmdPacket packet) { m_client.Send(packet); m_lstSendTime = Sys_GetTime(); }
void RecvData(object sender, NetEventArgs e) { Sys_Log(getString(e.Client.RecvPacket.GetReadData())); m_lstReadTime = Sys_GetTime(); UInt16 cmd = 0; CmdPacket packet = e.Client.RecvPacket; packet.ReadUShort(out cmd); switch (cmd) { case Proto.Keep_Alive: { UInt32 time = 0; if (packet.ReadUInt(out time)) { CmdPacket tpacket = new CmdPacket(); tpacket.WriteUShort(Proto.Keep_Alive_Ack); tpacket.WriteUInt(time); send(tpacket); } break; } case Proto.Keep_Alive_Ack: { UInt32 time = 0; if (packet.ReadUInt(out time)) { m_rtt = Sys_GetTime() - time; } break; } case Proto.Synch_Pos: { //同步位置和速度 if (!m_game.m_bSer) { UInt64 time; packet.ReadUInt64(out time); float x, z, vx, vz; packet.ReadFloat(out x); packet.ReadFloat(out z); packet.ReadFloat(out vx); packet.ReadFloat(out vz); m_other.change(time, x, z, vx, vz); } break; } case Proto.C_GameShot: { //同步操作 float vx, vz; packet.ReadFloat(out vx); packet.ReadFloat(out vz); //if (m_game.m_bSer) m_other.shot(vx, vz); break; } case Proto.S_GameInit: { m_state = State.ST_GameInit; break; } case Proto.S_GameStart: { m_state = State.ST_GameRunning; char bSer; if (packet.ReadByte(out bSer)) { m_game.m_bSer = (bSer != 0); } char bottom; if (packet.ReadByte(out bottom)) { m_game.m_bottom = (bottom != 0); } m_game.gameStart(); break; } } }
private void DealwithCmd() { string s = GetCommandLine().Trim(); if (s != "") { if (s.ToUpper().StartsWith("PRINT")) { string[] splits=Regex.Split(s,@"\s{1,}"); if (splits.Length != 3) { throw new Exception("PRINT格式不对"); } Packet c = new PrintPacket(splits[1], splits[2], CmdCB); c.EcChannel = ec; c.Send(); } else { CmdPacket c = new CmdPacket(s, CmdCB); c.EcChannel = ec; c.Send(); } } else { richTextBox1.Text += "\r\n" + "请检查命令格式!"; richTextBox1.Text += "\r\n" + (char)9632; } }
private void EvaluatorTeamNM(CmdResult result) { if (Regex.IsMatch(ec.CurrentCmdPacket.CmdString.ToUpper().Trim(), "RT[0-9A-Z]{5}")) { if (Regex.IsMatch(result.Data, @"\sNM([0-9]{1,3})\s")) { result.DiscardResult = true; CmdPacket c= new CmdPacket("RTN", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } else { CmdPacket c= new CmdPacket("PAT:A", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } } else if (ec.CurrentCmdPacket.CmdString.ToUpper().Trim() == "RTN") { if (Regex.IsMatch(ec.TempResultBuffer + result.Data, @"NM([0-9]{1,3}).*?\1\.")) { CmdPacket c = new CmdPacket("PAT:A", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } else { CmdPacket c = new CmdPacket("PN", CmdCB, true, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } } else if (ec.CurrentCmdPacket.CmdString.ToUpper().Trim() == "PN") { if (Regex.IsMatch(ec.TempResultBuffer + result.Data, @"NM([0-9]{1,3}).*?\1\.")) { CmdPacket c = new CmdPacket("PAT:A", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } else { ec.CurrentCmdPacket.Repeat = true; } } else if (ec.CurrentCmdPacket.CmdString.ToUpper().Trim() == "PAT:A") { if (!result.Data.ToUpper().Contains("TOTAL:")) { CmdPacket c = new CmdPacket("PAT:", CmdCB, false, new CmdResultEvaluator(EvaluatorTeamNM), null); c.EcChannel = ec; ec.CurrentCmdPacket.SubCmdPacket = c; } } }
void Update() { Vector3 vec = ball.rigidbody.velocity; if (vec.x > 50) { vec.x = 50; } if (vec.x < -50) { vec.x = -50; } if (vec.z > 50) { vec.z = 50; } if (vec.z < -50) { vec.z = -50; } ball.rigidbody.velocity = vec; Vector3 cameraVec = Camera.main.transform.position; if (cameraVec.x < -3) { cameraVec.x = -3; } if (cameraVec.x > 3) { cameraVec.x = 3; } Camera.main.transform.position = cameraVec; if (m_game.m_state != Game.State.ST_Running) { return; } if (m_game.m_bottom && ball.position.z <= 0 || !m_game.m_bottom && ball.position.z >= 0) { bool click = false; if (m_automatic) { if (Time.realtimeSinceStartup - m_lstClickTime > 0.11f) { click = true; m_lstClickTime = Time.realtimeSinceStartup; } } else if (Input.GetMouseButtonUp(0)) { click = true; } if (click) { Vector3 direction = ball.position - selfGun.position; direction.y = 0; Debug.Log("self:" + direction); ball.rigidbody.velocity = direction * rate; //ball.rigidbody.AddForce(direction * rate, ForceMode.Impulse); CmdPacket packet = new CmdPacket(); packet.WriteUShort(Proto.C_GameShot); packet.WriteFloat(ball.rigidbody.velocity.x); packet.WriteFloat(ball.rigidbody.velocity.z); m_client.send(packet); } } if (Input.GetKey(KeyCode.A)) { cameraVec.x += -1 * Time.deltaTime * cameraMoveSpeed; } if (Input.GetKey(KeyCode.D)) { cameraVec.x += 1 * Time.deltaTime * cameraMoveSpeed; } }