Beispiel #1
0
        /// <summary>
        /// 关闭服务器
        /// </summary>
        public void ServerStop()
        {
            try
            {
                BroadcastMessage(new Data(HeadInformation.ServerOffline));

                _Server.Close();
                _Server.Dispose();

                ClientIDBase = 0;
                ClientList.Clear();
            }
            catch (Exception ex)
            {
            }
        }
Beispiel #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();
            }
        }
Beispiel #3
0
 /// <summary>
 /// 向指定客户端发送消息
 /// </summary>
 /// <param name="ClientID">客户端ID</param>
 /// <param name="data">消息data</param>
 void SendMessageToClientByID(int ClientID, Data data)
 {
     ClientList.Find(i => i.ClientID == ClientID).Send(data);
 }
Beispiel #4
0
        /// <summary>
        /// 添加客户端对象至客户端容器
        /// </summary>
        /// <param name="client">客户端实例对象</param>
        bool AddClienToClientList(Client client)
        {
            try
            {
                bool sign = true;

                client.Send(new Data(HeadInformation.CheckConnectState));

                Data result = client.Receive();

                if (OnlineClientCount != 0 && ClientList.Exists(i => i.ClientName == result.Data_Message.ClientName))
                {
                    sign = false;

                    client.Send(new Data(HeadInformation.CheckConnectState, new Message()
                    {
                        Sign = sign
                    }));
                }
                else
                {
                    int ClientID = ++ClientIDBase;

                    string ClientName = result.Data_Message.ClientName;

                    client.ClientID   = ClientID;
                    client.ClientName = ClientName;

                    ClientList.Add(client);

                    List <ClientList> onlineClientList = new List <ClientList>();

                    foreach (var item in ClientList)
                    {
                        onlineClientList.Add(new ClientList()
                        {
                            ClientID = item.ClientID, ClientName = item.ClientName
                        });
                    }

                    Message msg = new Message()
                    {
                        ClientID = ClientID, ClientName = ClientName, Sign = sign, OnlineClientList = onlineClientList
                    };

                    client.Send(new Data(HeadInformation.CheckConnectState, msg));

                    AddClienToClientList_Event?.Invoke(client);

                    BroadcastMessage(new Data(HeadInformation.ClientOnline, new Message()
                    {
                        ClientID = ClientID, ClientName = ClientName
                    }));
                }

                return(sign);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }