ProtocolProcessorBase..cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using SuperSocket.SocketBase.Protocol;
  6. namespace SuperWebSocket.Protocol
  7. {
  8. abstract class ProtocolProcessorBase : IProtocolProcessor
  9. {
  10. protected ProtocolProcessorBase(int version, ICloseStatusCode closeStatusCode)
  11. {
  12. CloseStatusClode = closeStatusCode;
  13. Version = version;
  14. VersionTag = version.ToString();
  15. }
  16. public abstract bool Handshake(IWebSocketSession session, WebSocketReceiveFilterBase previousFilter, out IReceiveFilter<IWebSocketFragment> dataFrameReader);
  17. public IProtocolProcessor NextProcessor { get; set; }
  18. public abstract void SendMessage(IWebSocketSession session, string message);
  19. public abstract bool TrySendMessage(IWebSocketSession session, string message);
  20. public abstract void SendCloseHandshake(IWebSocketSession session, int statusCode, string closeReason);
  21. public abstract void SendPong(IWebSocketSession session, byte[] pong);
  22. public abstract void SendPing(IWebSocketSession session, byte[] ping);
  23. public abstract bool CanSendBinaryData { get; }
  24. public abstract void SendData(IWebSocketSession session, byte[] data, int offset, int length);
  25. public abstract bool TrySendData(IWebSocketSession session, byte[] data, int offset, int length);
  26. public ICloseStatusCode CloseStatusClode { get; private set; }
  27. public int Version { get; private set; }
  28. protected string VersionTag { get; private set; }
  29. public abstract bool IsValidCloseCode(int code);
  30. public abstract IList<ArraySegment<byte>> GetEncodedPackage(int opCode, byte[] data, int offset, int length);
  31. public abstract IList<ArraySegment<byte>> GetEncodedPackage(int opCode, string message);
  32. }
  33. }