12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using SuperSocket.Common;
- using SuperSocket.SocketBase;
- using SuperSocket.SocketBase.Command;
- using SuperSocket.SocketBase.Protocol;
- namespace SuperWebSocket.Protocol
- {
- /// <summary>
- /// WebSocketReceiveFilter basis
- /// </summary>
- public abstract class WebSocketReceiveFilterBase : ReceiveFilterBase<IWebSocketFragment>
- {
- /// <summary>
- /// The length of Sec3Key
- /// </summary>
- protected const int SecKey3Len = 8;
- private readonly IWebSocketSession m_Session;
- internal IWebSocketSession Session
- {
- get { return m_Session; }
- }
- static WebSocketReceiveFilterBase()
- {
- HandshakeRequestInfo = new HandshakeRequest();
- }
- /// <summary>
- /// Initializes a new instance of the <see cref="WebSocketReceiveFilterBase" /> class.
- /// </summary>
- /// <param name="session">The session.</param>
- protected WebSocketReceiveFilterBase(IWebSocketSession session)
- {
- m_Session = session;
- }
- /// <summary>
- /// Initializes a new instance of the <see cref="WebSocketReceiveFilterBase" /> class.
- /// </summary>
- /// <param name="previousReceiveFilter">The previous receive filter.</param>
- protected WebSocketReceiveFilterBase(WebSocketReceiveFilterBase previousReceiveFilter)
- : base(previousReceiveFilter)
- {
- m_Session = previousReceiveFilter.Session;
- }
- /// <summary>
- /// Handshakes the specified protocol processor.
- /// </summary>
- /// <param name="protocolProcessor">The protocol processor.</param>
- /// <param name="session">The session.</param>
- /// <returns></returns>
- protected bool Handshake(IProtocolProcessor protocolProcessor, IWebSocketSession session)
- {
- IReceiveFilter<IWebSocketFragment> dataFrameReader;
- if (!protocolProcessor.Handshake(session, this, out dataFrameReader))
- {
- session.Close(CloseReason.ServerClosing);
- return false;
- }
- //Processor handshake sucessfully, but output datareader is null, so the multiple protocol switch handled the handshake
- //In this case, the handshake is not completed
- if (dataFrameReader == null)
- {
- NextReceiveFilter = this;
- return false;
- }
- NextReceiveFilter = dataFrameReader;
- return true;
- }
- /// <summary>
- /// Gets the handshake request info.
- /// </summary>
- protected static IWebSocketFragment HandshakeRequestInfo { get; private set; }
- }
- }
|