Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
 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);
     }
 }