private void AddClient(SocketEventParam socketParam)
 {
     lock (_clientGroup)
     {
         _clientGroup[socketParam.Socket] = socketParam;
     }
 }
示例#2
0
        /// <summary>
        /// 作为客户端连接后要对AsyncSocketClient的处理--事件方法
        /// </summary>
        /// <param name="param"></param>
        /// <param name="client"></param>
        private void SocketConnectEvent(SocketEventParam param, AsyncSocketClient client)
        {
            try
            {
                if (param.Socket == null || client == null) //连接失败
                {
                }
                else
                {
                    lock (_clientGroup)
                    {
                        _clientGroup[client.ConnectSocket] = client;
                    }

                    client.OnSocketClose += Client_OnSocketClose;
                    client.OnReadData    += Client_OnReadData;
                    client.OnSendData    += Client_OnSendData;

                    _listReadEvent.PutObj(new SocketEventDeal(client, EN_SocketDealEvent.read));
                }
                _socketEventPool.PutObj(param);
            }
            catch (Exception ex)
            {
                NetLogger.Log($"SocketConnectEvent 异常 {ex.Message}***", ex);
            }
        }
示例#3
0
        /// <summary>
        /// 对数据的打包处理
        /// </summary>
        private void DealEventPool()
        {
            while (true)
            {
                SocketEventParam param = _socketEventPool.GetObj();
                if (param == null)
                {
                    break;
                }

                if (param.SocketEvent == EN_SocketEvent.close)
                {
                    var aa = _clientGroup.TryRemove(param.Socket, out _);
                    if (!aa)
                    {
                        Console.WriteLine("_clientGroup TryRemove False");
                    }
                }

                //if (PacketMinLen == 0) //字节流处理
                //{
                OnSocketPacketEvent?.Invoke(param);
                //}
            }
        }
示例#4
0
        /// <summary>
        /// 对读取到的数据进行处理--Client异步读取完后会执行这个事件方法
        /// </summary>
        /// <param name="client">当前客户端类</param>
        /// <param name="readData">读取到的数据</param>
        private void Client_OnReadData(AsyncSocketClient client, byte[] readData, int offset, int count)
        {
            _listReadEvent.PutObj(new SocketEventDeal(client, EN_SocketDealEvent.read)); //读下一条
            try
            {
                var param = new SocketEventParam(client.ConnectSocket, EN_SocketEvent.read)
                {
                    ClientInfo = client.ClientInfo,
                    Data       = readData,
                    Offset     = offset,
                    Count      = count
                };

                if (client.ConnectSocket.Connected)
                {
                    _socketEventPool.PutObj(param);

                    lock (this)
                    {
                        ReadByteCount += readData.Length;
                    }
                }
            }
            catch (Exception ex)
            {
                NetLogger.Log($@"Client_OnReadData 异常 {ex.Message}***{ex.StackTrace}");
            }
        }
示例#5
0
        /// <summary>
        /// Listener 生成的 AsyncSocketClient 回调方法
        /// </summary>
        /// <param name="listenParam">客户端参数</param>
        /// <param name="client">生成的客户端 实体类</param>
        private void Listener_OnAcceptSocketClient(ListenParam listenParam, AsyncSocketClient client)
        {
            try
            {
                lock (_clientGroup)
                {
                    _clientGroup[client.ConnectSocket] = client;
                }

                //给Client添加消息处理事件
                client.OnSocketClose += Client_OnSocketClose;
                client.OnReadData    += Client_OnReadData;
                client.OnSendData    += Client_OnSendData;
                client.OnSocketHeart += Client_OnSocketHeart;
                _listReadEvent.PutObj(new SocketEventDeal(client, EN_SocketDealEvent.read));
                var param = new SocketEventParam(client.ConnectSocket, EN_SocketEvent.accept)
                {
                    ClientInfo = client.ClientInfo
                };
                _socketEventPool.PutObj(param);
            }
            catch (Exception ex)
            {
                NetLogger.Log(@"Listener_OnAcceptSocket 异常", ex);
            }
        }
 private void RemoveClient(SocketEventParam socketParam)
 {
     lock (_clientGroup)
     {
         var remove = _clientGroup.Remove(socketParam.Socket);
         if (!remove)
         {
             Console.WriteLine($"移除{socketParam.ClientInfo.PeerRemoteEndPoint} 失败");
         }
     }
 }
示例#7
0
 private void Client_OnSocketClose(AsyncSocketClient client)
 {
     try
     {
         SocketEventParam param = new SocketEventParam(client.ConnectSocket, EN_SocketEvent.close);
         param.ClientInfo = client.ClientInfo;
         //Console.WriteLine("放入关闭命令");
         _socketEventPool.PutObj(param);
     }
     catch (Exception ex)
     {
         NetLogger.Log($"Client_OnSocketClose 异常 {ex.Message}***", ex);
     }
 }
        /// <summary>
        /// 收到最终的字节流 事件方法
        /// </summary>
        /// <param name="socketParam"></param>
        private void SocketPacketDeal(SocketEventParam socketParam)
        {
            string peerIp = socketParam.ClientInfo.PeerRemoteEndPoint;

            switch (socketParam.SocketEvent)
            {
            case EN_SocketEvent.accept:
            {
                AddClient(socketParam);
                NetLogger.Log($@"客户端链接!本地端口:{socketParam.ClientInfo.LocalPort},对端:{peerIp},客户端数量:{ClientCount}");
                break;
            }

            case EN_SocketEvent.close:
            {
                RemoveClient(socketParam);
                NetLogger.Log($@"客户端断开!本地端口:{socketParam.ClientInfo.LocalPort},对端:{peerIp},剩余客户端数量:{ClientCount}");
                break;
            }

            case EN_SocketEvent.read:
            {
                var data = new byte[socketParam.Count];
                Array.Copy(socketParam.Data, 0, data, 0, socketParam.Count);
                OnSocketReceive?.Invoke(socketParam.Socket, data);
                break;
            }

            case EN_SocketEvent.connect:
            {
                if (socketParam.Socket != null)
                {
                    AddClient(socketParam);
                    NetLogger.Log($@"连接对端成功!本地端口:{socketParam.ClientInfo.LocalPort},对端:{peerIp},客户端数量:{ClientCount}");
                }
                else
                {
                    NetLogger.Log($@"连接对端失败!本地端口:{socketParam.ClientInfo.LocalPort},对端:{peerIp},客户端数量:{ClientCount}");
                }

                break;
            }
            }

            //SocketEventParamPool.Instance.PushSocketEventDeal(socketParam);
        }
示例#9
0
 /// <summary>
 /// package中添加的事件方法
 /// </summary>
 /// <param name="param"></param>
 public void PutClientPacket(SocketEventParam param)
 {
     OnSocketPacketEvent?.Invoke(param);
 }
示例#10
0
 public void PutSocketParam(SocketEventParam param)
 {
     throw new NotImplementedException();
 }