static void Main(string[] args) { Console.WriteLine($"My id is {int.Parse(args[1])}"); CSharpClient client = new CSharpClient(); client.OnReceive += delegate() { IMsg msg = client.Take(); MessageToOneClient mm = msg.Content as MessageToOneClient; Console.WriteLine($"Message type::{msg.PacketType}"); Console.WriteLine(mm); }; Console.WriteLine("Connecting......"); if (client.Connect("127.0.0.1", 7777)) { Console.WriteLine("成功连接Agent."); } else { Console.WriteLine("连接Agent失败."); } MessageToServer mm = new MessageToServer(); mm.PlayerID = int.Parse(args[1]); mm.TeamID = int.Parse(args[0]); mm.JobType = Communication.Proto.JobType.Job1; client.SendMessage(mm); Console.ReadLine(); client.Stop(); client.Dispose(); }
public void OnReciveShort(MessageToOneClient msg) //连接是否成功 { if (msg.MessageType == MessageType.ValidPlayer) { } else { MessageBox.Show("Invalid Player"); Starting starting = new Starting(); Application.Run(starting); MessageToServer msg1 = new MessageToServer(); msg1.MessageType = MessageType.AddPlayer; Program.watch = starting.watch; Program.teamID = Program.watch?1911:starting.teamid; Program.playerID = Program.watch ? 1911 : starting.playerid; Program.jobType = starting.job; Program.clientCommunicator.Stop(); msg1.TeamID = Program.teamID; msg1.PlayerID = Program.playerID; msg1.JobType = starting.job; if (Program.clientCommunicator.Connect("127.0.0.1", starting.port)) { Program.clientCommunicator.SendMessage(msg1); } else { MessageBox.Show("连接Agent失败"); return; } } }
private void SendAddPlayerResponse(MessageToServer msgRecv, bool isValid) //作为对 AddPlayer 消息的响应,给客户端发送信息 { if (msgRecv.PlayerID == 1911 && msgRecv.TeamID == 1911) // 观战 { Console.WriteLine("A new spectator comes to watch this game."); return; } MessageToOneClient msg2Send = new MessageToOneClient(); msg2Send.PlayerID = msgRecv.PlayerID; msg2Send.TeamID = msgRecv.TeamID; msg2Send.MessageType = isValid ? MessageType.ValidPlayer : MessageType.InvalidPlayer; serverCommunicator.SendMessage(msg2Send); if (isValid) { Console.WriteLine("A new player with teamID {0} and playerID {1} joined the game.", msgRecv.TeamID, msgRecv.PlayerID); } else { Console.WriteLine("The request of a player declaring to have teamID {0} and playerID {1} to join the game has been rejected.", msgRecv.TeamID, msgRecv.PlayerID); } lock (addPlayerLock) { CheckStart(); //检查是否该开始游戏了 } }
public void SendMessage(MessageToOneClient msg) { Message message = new Message(); message.Content = msg; message.PacketType = PacketType.MessageToOneClient; byte[] bytes; message.WriteTo(out bytes); Send(bytes); }
private void SendAddPlayerResponse(MessageToServer msgRecv, bool isValid) //作为对 AddPlayer 消息的响应,给客户端发送信息 { MessageToOneClient msg2Send = new MessageToOneClient(); msg2Send.PlayerID = msgRecv.PlayerID; msg2Send.TeamID = msgRecv.TeamID; msg2Send.MessageType = isValid ? MessageType.ValidPlayer : MessageType.InvalidPlayer; serverCommunicator.SendMessage(msg2Send); lock (addPlayerLock) { CheckStart(); //检查是否该开始游戏了 } }
public void OnReciveShort(MessageToOneClient msg) //连接是否成功 { if (msg.MessageType == MessageType.ValidPlayer) { } else { MessageBox.Show("Invalid Player"); Starting starting = new Starting(); Application.Run(new Starting()); MessageToServer msg1 = new MessageToServer(); msg1.MessageType = MessageType.AddPlayer; msg1.TeamID = starting.teamid; msg1.PlayerID = starting.playerid; msg1.JobType = starting.job; Program.clientCommunicator.SendMessage(msg1); } }
private void SendMessageToTeammate(MessageToServer msgRecv) { if (!ValidTeamIDAndPlayerID(msgRecv.TeamID, msgRecv.PlayerID) || !ValidTeamIDAndPlayerID(msgRecv.TeamID, msgRecv.ToPlayerID)) { return; } if (msgRecv.Message.Length > 64) { return; } MessageToOneClient msg = new MessageToOneClient(); msg.PlayerID = msgRecv.ToPlayerID; msg.TeamID = msgRecv.TeamID; msg.Message = msgRecv.Message; msg.MessageType = MessageType.Send; serverCommunicator.SendMessage(msg); game.SendMessage(communicationToGameID[msgRecv.TeamID, msgRecv.PlayerID], communicationToGameID[msg.TeamID, msg.PlayerID], msgRecv.Message); }
void Start() { Debug.Log("开始初始化参数"); propManager = GetComponent <PropManager>(); heroManager = GetComponent <HeroManager>(); bulletManager = GetComponent <BulletManager>(); Debug.Log(Application.dataPath); string str = File.ReadAllText(Application.streamingAssetsPath + "/JobTest.txt"); /*TextAsset txt = Resources.Load("JobTest") as TextAsset; * string[] s = txt.text.Split(' ');*/ string[] s = str.Split(' '); port = (ushort)float.Parse(s[0]); teamId = (int)float.Parse(s[1]); playerId = (int)float.Parse(s[2]); jobN = (int)float.Parse(s[3]); // TO DO:初始化通信 messageToServer = new MessageToServer(); csharpClient = new CSharpClient(); csharpClient.OnReceive += delegate() { //Debug.Log("Message Received."); if (csharpClient.TryTake(out IMsg iMsg)) { switch (iMsg.PacketType) { case PacketType.MessageToClient: { MessageToClient msg = iMsg.Content as MessageToClient; //Debug.Log("msg received"); switch (msg.MessageType) { case MessageType.StartGame: GameStart(msg); break; case MessageType.Gaming: Refresh(msg); break; case MessageType.EndGame: GameOver(); break; default: break; } break; } case PacketType.MessageToOneClient: { MessageToOneClient msg = iMsg.Content as MessageToOneClient; //Debug.Log("msg received"); switch (msg.MessageType) { case MessageType.ValidPlayer: Debug.Log("Info Valid"); break; case MessageType.InvalidPlayer: Debug.Log("Info Invalid"); break; case MessageType.Send: Debug.Log("Info Send"); break; default: break; } break; } default: break; } } else { Debug.Log("Failed to pop a message"); } }; if (csharpClient.Connect("127.0.0.1", port)) { Debug.Log("成功连接Agent."); } else { Debug.Log("连接Agent失败."); Application.Quit(); } messageToServer.MessageType = MessageType.AddPlayer; messageToServer.TeamID = teamId; messageToServer.PlayerID = playerId; switch (jobN) { case 0: messageToServer.JobType = JobType.Job0; break; case 1: messageToServer.JobType = JobType.Job1; break; case 2: messageToServer.JobType = JobType.Job2; break; case 3: messageToServer.JobType = JobType.Job3; break; case 4: messageToServer.JobType = JobType.Job4; break; case 5: messageToServer.JobType = JobType.Job5; break; case 6: messageToServer.JobType = JobType.Job6; break; } csharpClient.SendMessage(messageToServer); //WebClient heros = new ConcurrentDictionary <long, HeroScript>(); props = new ConcurrentDictionary <long, PropScript>(); bullets = new ConcurrentDictionary <long, BulletScript>(); isCharactersExisted = new ConcurrentDictionary <long, bool>(); isPropsExisted = new ConcurrentDictionary <long, bool>(); isBulletsExisted = new ConcurrentDictionary <long, bool>(); laidList = new ConcurrentDictionary <long, bool>(); TaskQueue = new ConcurrentQueue <KeyValuePair <long, GameObjInfo> >(); LaidQueue = new ConcurrentQueue <GameObjInfo>(); isReady = false; myAngle = 0; isNewMessageToServer = false; for (int i = 0; i < 50; i++) { for (int j = 0; j < 50; j++) { mapColor[i, j] = 0; cellColor[i, j] = 0; } } Debug.Log("参数初始化完成"); }
static void Main(string[] args) { Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //取得开始命令 AOption?options = null; Parser.Default.ParseArguments <AOption>(args).WithParsed(o => { options = o; }); Int64 teamid, playerid; ClientData client; if (options == null) { Starting starting = new Starting(); Application.Run(starting); teamid = starting.teamid; playerid = starting.playerid; client = new ClientData(starting.teamid, starting.playerid, starting.job, starting.port); } else { teamid = options.teamID; playerid = options.playerID; client = new ClientData(options.teamID, options.playerID, (JobType)options.job, options.ServerPort); } if (clientCommunicator.Connect("127.0.0.1", client.port)) { } else { MessageBox.Show("连接Agent失败"); return; } //向server发消息 MessageToServer msg = new MessageToServer(); msg.MessageType = MessageType.AddPlayer; msg.TeamID = teamid; msg.PlayerID = playerid; msg.JobType = client.jobType; //TO DO:发出消息 clientCommunicator.OnReceive += delegate() { if (clientCommunicator.TryTake(out IMsg msg)) { client.messageline.Add(new Tuple <IMsg, long>(msg, System.Environment.TickCount64)); } }; client.messageline = new BlockingCollection <Tuple <IMsg, long> >(); int bulletspeed; switch (client.jobType) { default: case JobType.Job0: bulletspeed = Program.basicBulletMoveSpeed; break; case JobType.Job1: bulletspeed = Program.basicBulletMoveSpeed * 2; break; case JobType.Job2: bulletspeed = Program.basicBulletMoveSpeed / 2; break; case JobType.Job3: bulletspeed = Program.basicBulletMoveSpeed / 2; break; case JobType.Job4: bulletspeed = Program.basicBulletMoveSpeed * 4; break; case JobType.Job5: bulletspeed = Program.basicBulletMoveSpeed; break; case JobType.Job6: bulletspeed = Program.basicBulletMoveSpeed; break; } client.gameform = new Form1(teamid, playerid, bulletspeed, client.jobType); new Thread(() => { while (true) { if (client.messageline.TryTake(out Tuple <IMsg, long> msg)) { if (msg.Item1.PacketType == PacketType.MessageToOneClient) { MessageToOneClient mm = msg.Item1.Content as MessageToOneClient; if (mm.TeamID == teamid && mm.PlayerID == playerid) { client.OnReciveShort(mm); } } else if (msg.Item1.PacketType == PacketType.MessageToClient) { MessageToClient mm = msg.Item1.Content as MessageToClient; if (mm.TeamID == teamid && mm.PlayerID == playerid) { client.OnReciveNormal(mm, msg.Item2); } } } } } ).Start(); clientCommunicator.SendMessage(msg); Application.Run(client.gameform); Application.Exit(); }
private static int MainInternal(IPEndPoint serverend, ushort agentport) { dict.Clear(); server.OnReceive += delegate(IServer sender, IntPtr connId, byte[] bytes) { if (!dict.Values.Contains(connId)) { Message message = new Message(); message.MergeFrom(bytes); //这里需不需要拷贝? if (message.PacketType == PacketType.MessageToServer) //是否有其他可能?如何处理? { MessageToServer msg = message.Content as MessageToServer; UInt64 key = ((UInt64)msg.PlayerID | ((UInt64)msg.TeamID << 32)); if (dict.ContainsKey(key)) { Console.WriteLine($"More than one client claims to have the same ID {msg.TeamID} {msg.PlayerID}."); return(HandleResult.Error); } dict.TryAdd(key, connId);//不可能false } } client.Send(bytes, bytes.Length); return(HandleResult.Ok); }; //去年是Client退出前还要专门发一个消息,今年不太清楚,暂且如此 server.OnClose += delegate(IServer sender, IntPtr connId, SocketOperation socketOperation, int errorCode) { foreach (UInt64 id in dict.Keys) { if (dict[id] == connId) { if (!dict.TryRemove(id, out IntPtr temp)) { return(HandleResult.Error); } Console.WriteLine($"Player {id>>32} {id&0xffffffff} closed the connection."); break; } } return(HandleResult.Ok); }; client.OnReceive += delegate(IClient sender, byte[] bytes) { MemoryStream istream = new MemoryStream(bytes); BinaryReader br = new BinaryReader(istream); PacketType type = (PacketType)br.PeekChar(); br.Close();//debug期间加的,也许有用也许没用 istream.Dispose(); if (type == PacketType.MessageToOneClient) { Message m = new Message(); m.MergeFrom(bytes); MessageToOneClient message = m.Content as MessageToOneClient; UInt64 key = ((UInt64)message.PlayerID | ((UInt64)message.TeamID << 32)); if (!dict.ContainsKey(key)) { Console.WriteLine($"Error: No such player corresponding to ID {message.TeamID} {message.PlayerID}"); return(HandleResult.Error); } if (!server.Send(dict[key], bytes, bytes.Length)) { Console.WriteLine($"向{dict[key]}发送失败。"); } return(HandleResult.Ok); } foreach (IntPtr connId in server.GetAllConnectionIds()) { if (!server.Send(connId, bytes, bytes.Length)) { Console.WriteLine($"向{connId}发送失败。"); } } return(HandleResult.Ok); }; Console.WriteLine("Connecting......"); if (!client.Connect(serverend.Address.ToString(), (ushort)serverend.Port)) { Console.WriteLine("Failed to connect with the game server."); } else { int i; for (i = 0; i < 300; i++) { if (client.IsConnected) { Console.WriteLine("Connect with the game server successfully."); break; } else { Thread.Sleep(100); } } if (i == 300) { Console.WriteLine("Failed to connect with the game server."); } } server.Port = agentport; if (server.Start()) { Console.WriteLine("Agent starts listening."); } else { Console.WriteLine("Agent starts unsuccessfully"); } Thread.Sleep(int.MaxValue); dict.Clear(); server.Stop(); server.Dispose(); client.Stop(); client.Dispose(); return(0); }
static void Main() { CommServer server = new CommServer(); server.Listen(8888); server.OnConnect += delegate() { Console.WriteLine("An agent connects."); }; server.OnReceive += delegate() { byte[] data; IMsg msg; if (server.TryTake(out msg)) { MessageToServer mm = msg.Content as MessageToServer; Console.WriteLine($"Receive a message from {mm.PlayerID}"); Console.WriteLine($"Message type::{mm.MessageType}"); if (mm.MessageType == MessageType.Send) { Console.WriteLine(mm.Message); } } else { Console.WriteLine("fail to dequeue"); } }; Console.WriteLine("============================"); Console.ReadLine(); { MessageToOneClient m = new MessageToOneClient(); m.PlayerID = 0; m.TeamID = 0; m.MessageType = MessageType.ValidPlayer; m.Guid = 888; server.SendMessage(m); Console.WriteLine("已发送Validplayer"); } Console.ReadLine(); server.SendMessage(TestMessage(0, MessageType.StartGame)); Console.WriteLine("已发送StartGame"); Console.ReadLine(); for (int i = 0; i < 100; i++) { server.SendMessage(TestMessage(i, MessageType.Gaming)); Thread.Sleep(50); } Console.WriteLine("Gaming"); Console.ReadLine(); for (int i = 0; i < 100; i++) { server.SendMessage(TestMessage(i + 100, MessageType.Gaming)); Thread.Sleep(50); } MessageToOneClient m2OC = new MessageToOneClient(); m2OC.Guid = 12345; m2OC.PlayerID = 0; m2OC.TeamID = 0; m2OC.MessageType = MessageType.Send; m2OC.Message = "Hello world!"; server.SendMessage(m2OC); Console.WriteLine("Msg sent"); for (int i = 0; i < 100; i++) { server.SendMessage(TestMessage(i + 200, MessageType.Gaming)); Thread.Sleep(50); } server.SendMessage(TestMessage(666, MessageType.EndGame)); Console.WriteLine("GameOver"); Console.ReadLine(); server.Dispose(); server.Stop(); }