private async void Run() { byte[] buffer; while (true) { buffer = await client.Receive(remotePoint); object msgObj = FormatterHelper.Deserialize(buffer); Type msgType = msgObj.GetType(); if (msgType == typeof(ListUserResponseMessage)) { // 转换消息 ListUserResponseMessage usersMsg = (ListUserResponseMessage)msgObj; // 更新用户列表 userList.Clear(); foreach (User user in usersMsg.UserList) { userList.Add(user); } this.DisplayUsers(userList); } else if (msgType == typeof(PingMessage)) { // 转换消息 PingMessage purchReqMsg = (PingMessage)msgObj; // 发送打洞消息到远程主机 TrashMessage trashMsg = new TrashMessage(); buffer = FormatterHelper.Serialize(trashMsg); client.Send(buffer, buffer.Length, purchReqMsg.RemotePoint); } else if (msgType == typeof(P2PTextMessage)) { // 转换消息 P2PTextMessage workMsg = (P2PTextMessage)msgObj; Console.WriteLine("Receive a message: {0}", workMsg.Message); // 发送应答消息 P2PAckMessage ackMsg = new P2PAckMessage(); buffer = FormatterHelper.Serialize(ackMsg); client.Send(buffer, buffer.Length, remotePoint); } else if (msgType == typeof(P2PAckMessage)) { this.ReceivedACK = true; } else if (msgType == typeof(TrashMessage)) { Console.WriteLine("Recieve a trash message"); } Thread.Sleep(100); } }
private void Run() { byte[] buffer; while (true) { buffer = client.Receive(ref remotePoint); object msgObj = FormatterHelper.Deserialize(buffer); Type msgType = msgObj.GetType(); if (msgType == typeof(ListUserResponseMessage)) { // 转换消息 ListUserResponseMessage usersMsg = (ListUserResponseMessage)msgObj; // 更新用户列表 userList.Clear(); foreach (User user in usersMsg.UserList) { userList.Add(user); } this.DisplayUsers(userList); } else if (msgType == typeof(PingMessage)) { // 转换消息 PingMessage purchReqMsg = (PingMessage)msgObj; // 发送打洞消息到远程主机 TrashMessage trashMsg = new TrashMessage(); buffer = FormatterHelper.Serialize(trashMsg); client.Send(buffer, buffer.Length, purchReqMsg.RemotePoint); } else if (msgType == typeof(P2PTextMessage)) { // 转换消息 P2PTextMessage workMsg = (P2PTextMessage)msgObj; Console.WriteLine("Receive a message: {0}", workMsg.Message); // 发送应答消息 P2PAckMessage ackMsg = new P2PAckMessage(); buffer = FormatterHelper.Serialize(ackMsg); client.Send(buffer, buffer.Length, remotePoint); } else if (msgType == typeof(P2PAckMessage)) { this.ReceivedACK = true; } else if (msgType == typeof(TrashMessage)) { Console.WriteLine("Recieve a trash message"); } Thread.Sleep(100); } }