private TcpSocketSendCallback OnSent(Action callback) { return(sent => { listener.Schedule(() => { if (listener.IsAvailable(identifier)) { if (sent.Status != SocketStatus.OK || sent.Count == 0) { listener.Disconnect(identifier); } if (sent.Count > 0) { listener.HandleSent(identifier, sent.Count); } } parts.Remove(sent.Buffer.Offset + sent.Buffer.Count); offset = parts.Count > 0 ? parts.Max() : 0; callback.Invoke(); }); }); }
/// <summary> /// Terminates the connection with the remote endpoint. /// </summary> public void Terminate() { if (listener.IsAvailable(identifier)) { listener.Disconnect(identifier); } }
public void Process(NetworkIncomingMessageHandler handler, int count) { if (listener.IsAvailable(identifier)) { if (count > 0) { if (offset + length >= memory.Length) { Decrypt(offset + length - memory.Length, count); } else { Decrypt(offset + length, count); } length += count; handler.OnMessage(new NetworkIncomingBufferMessage(this)); } else { listener.Disconnect(identifier); handler.OnDisconnected(); } } }