예제 #1
0
 public void Remove(AsyncSocketUserToken userToken)
 {
     lock (_mList)
     {
         _mList.Remove(userToken);
     }
 }
        protected bool MSendAsync; //标识是否有发送异步事件

        public AsyncSocketInvokeElement(AsyncSocketServer asyncSocketServer, AsyncSocketUserToken asyncSocketUserToken)
        {
            MAsyncSocketServer    = asyncSocketServer;
            MAsyncSocketUserToken = asyncSocketUserToken;

            MSendAsync = false;
        }
예제 #3
0
 public void Add(AsyncSocketUserToken userToken)
 {
     lock (_mList)
     {
         _mList.Add(userToken);
     }
 }
예제 #4
0
 private void BuildingSocketInvokeElement(AsyncSocketUserToken userToken)
 {
     userToken.AsyncSocketInvokeElement = new EsProtocol(this, userToken);
     if (userToken.AsyncSocketInvokeElement != null)
     {
         Program.Logger.InfoFormat("Building socket invoke element {0}.Local Address: {1}, Remote Address: {2}",
                                   userToken.AsyncSocketInvokeElement, userToken.ConnectSocket.LocalEndPoint, userToken.ConnectSocket.RemoteEndPoint);
     }
 }
예제 #5
0
 public void CopyList(ref AsyncSocketUserToken[] array)
 {
     //if (array == null) throw new ArgumentNullException(nameof(array));
     lock (_mList)
     {
         array = new AsyncSocketUserToken[_mList.Count];
         _mList.CopyTo(array);
     }
 }
 public void Push(AsyncSocketUserToken item)
 {
     if (item == null)
     {
         throw new ArgumentException("Items added to a AsyncSocketUserToken cannot be null");
     }
     lock (_mPool)
     {
         _mPool.Push(item);
     }
 }
예제 #7
0
        public void CloseClientSocket(AsyncSocketUserToken userToken)
        {
            if (userToken.ConnectSocket == null)
            {
                return;
            }

            var socketInfo =
                $"Local Address: {userToken.ConnectSocket.LocalEndPoint} Remote Address: {userToken.ConnectSocket.RemoteEndPoint}";

            Program.Logger.InfoFormat("Client connection disconnected. {0}", socketInfo);

            Program.OutputLog.LogFormat("Client connection disconnected. {0}", socketInfo);


            if (userToken.ConnectSocket.Connected)
            {
                try
                {
                    userToken.ConnectSocket.Shutdown(SocketShutdown.Both);
                }
                catch (Exception e)
                {
                    Program.Logger.ErrorFormat("CloseClientSocket Disconnect client {0} error, message: {1}", socketInfo, e.Message);

                    Program.OutputLog.LogFormat("CloseClientSocket Disconnect client {0} error, message: {1}", socketInfo, e.Message);
                }

                userToken.ConnectSocket.Close();
            }

            userToken.ConnectSocket = null; //释放引用,并清理缓存,包括释放协议对象等资源
            userToken.ReceiveBuffer.Clear(userToken.ReceiveBuffer.DataCount);
            userToken.SendBuffer.ClearPacket();

            _mMaxNumberAcceptedClients.Release();
            _mAsyncSocketUserTokenPool.Push(userToken);
            AsyncSocketUserTokenList.Remove(userToken);
        }
예제 #8
0
        public void Init()
        {
            for (var i = 0; i < _mNumConnections; i++) //按照连接数建立读写对象
            {
                var userToken = new AsyncSocketUserToken(_mReceiveBufferSize);
                userToken.ReceiveEventArgs.Completed += IO_Completed;
                userToken.SendEventArgs.Completed    += IO_Completed;
                _mAsyncSocketUserTokenPool.Push(userToken);
            }

            var adjustTimeSchedule = new ScheduleTask(0, true, ScheduleType.StartOnCondition);

            adjustTimeSchedule.OnScheduleExecuting += delegate(object sender, ScheduleTaskExecuteEventArgs args)
            {
                var task = (ScheduleTask)sender;
                if (task == null || task.LastExecuteTime.Date == DateTime.Today.Date)
                {
                    return;
                }
                if (DateTime.Now.Hour == 3 && DateTime.Now.Minute == 0 && DateTime.Now.Second < 30)
                {
                    AsyncSocketUserTokenList.AdjestTime();
                }
            };
            adjustTimeSchedule.StartCondition = running =>
            {
                if (running)
                {
                    return(true);
                }
                return(DateTime.Now.Hour == 3);
            };
            ScheduleManager.Register(adjustTimeSchedule);

            EsProtocolMgr = new EsProtocolMgr();
        }