public void OnIOCompleted(object sender, SocketAsyncEventArgs e) { TCPSocketToken token = e.UserToken as TCPSocketToken; try { if (e.LastOperation == SocketAsyncOperation.Send) { token.OnSendCompleted(); } else if (e.LastOperation == SocketAsyncOperation.Receive && e.BytesTransferred > 0) { token.OnReciveCompleted(); token.DoRecive(); } else { if (sender as Socket == token.ConnectSocket) { CloseToken(token); } } } catch (Exception ex) { LogHelper.LogException(ex); if (sender as Socket == token.ConnectSocket) { CloseToken(token); } } }
public void SetToken(TCPSocketToken token) { Interlocked.Exchange(ref _Token, token); if (token != null) { token.Session = this; token.SetPacketList(_SendList); } }
public override void Stop() { TCPSocketToken[] tokens = new TCPSocketToken[Tokens.Count]; lock (Tokens) { Tokens.CopyTo(tokens); } foreach (var token in tokens) { token.DisConnect(); } }
public virtual bool SendPacket(INetPacket packt) { _SendList.Enqueue(packt); TCPSocketToken token = Token; if (token == null || !token.IsConnect) { return(false); } token.TrySend(); return(true); }
public void Push(TCPSocketToken token) { lock (this) { if (token != null && !_TokenPool.Contains(token)) { --_UsedTokenNum; token.Clear(); token.Session = null; _TokenPool.Enqueue(token); } } }
public bool SendPackets(IEnumerable <INetPacket> packets) { foreach (var pack in packets) { _SendList.Enqueue(pack); } TCPSocketToken token = Token; if (token == null || !token.IsConnect) { return(false); } token.TrySend(); return(true); }
public void CloseToken(TCPSocketToken token) { lock (CloseLockObj) { if (OnCloseToken != null) { OnCloseToken(this, token); } TCPSession session = token.Session; if (session != null) { session.SetToken(null); session.OnDisconnect(); } _TokenPool.Push(token); } }
public TCPSocketToken Pop() { lock (this) { TCPSocketToken token = null; if (_TokenPool.Count > 0) { token = _TokenPool.Dequeue(); } if (token == null) { token = CreatNewToken(); } ++_UsedTokenNum; token.Clear(); return(token); } }
public bool IsConnect() { TCPSocketToken token = Token; return(token != null && token.IsConnect); }