Exemplo n.º 1
0
        void ReceiveServerMessages()
        {
            try
            {
                while (true)
                {
                    Data data = _Server.Receive();

                    // 触发事件
                    ReceiveMessages_Event?.Invoke(data);

                    if (data.HeadInfo == HeadInformation.ClientOnline)
                    {
                        _OnlineClientList.Add(new ClientList()
                        {
                            ClientName = data.Data_Message.ClientName, ClientID = data.Data_Message.ClientID
                        });
                    }
                    else if (data.HeadInfo == HeadInformation.ClientOffline)
                    {
                        _OnlineClientList.Remove(_OnlineClientList.Find(i => i.ClientID == data.Data_Message.ClientID));
                    }
                    else if (data.HeadInfo == HeadInformation.ServerOffline)
                    {
                        DisconConnect();

                        Thread.CurrentThread.Abort();
                    }
                }
            }
            catch (Exception ex)
            {
                Thread.CurrentThread.Abort();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 接收客户端消息
        /// </summary>
        /// <param name="client">客户端实例</param>
        void ReceiveMessages(object client)
        {
            try
            {
                Client _client = (Client)client;

                while (true)
                {
                    // 接收客户端消息
                    Data data = _client.Receive();

                    // 触发事件
                    ReceiveMessages_Event?.Invoke(data, _client);

                    // 判断头部信息类型
                    if (data.HeadInfo == HeadInformation.Message) // 消息
                    {
                        // 判断是否为私聊消息
                        if (data.Data_Message.ToClientID != 0) // 私聊
                        {
                            // 发送私聊消息
                            SendMessageToClientByID(data.Data_Message.ToClientID, data);
                        }
                        else // 群聊
                        {
                            // 广播群聊消息
                            BroadcastMessage(data);
                        }
                    }
                    else if (data.HeadInfo == HeadInformation.ClientOffline) // 客户端离线
                    {
                        ClientList.Remove(ClientList.Find(i => i.ClientID == data.Data_Message.ClientID));

                        // 广播客户端离线消息
                        BroadcastMessage(new Data(HeadInformation.ClientOffline, new Message()
                        {
                            ClientID = data.Data_Message.ClientID, ClientName = data.Data_Message.ClientName
                        }));
                    }
                }
            }
            catch (Exception ex)
            {
                // 终止当前线程
                Thread.CurrentThread.Abort();
            }
        }