using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SuperSocket.SocketBase.Protocol;
namespace SuperWebSocket.Protocol
{
///
/// http://tools.ietf.org/html/rfc6455#section-4.4
///
class MultipleProtocolSwitchProcessor : IProtocolProcessor
{
private byte[] m_SwitchResponse;
public MultipleProtocolSwitchProcessor(int[] availableVersions)
{
var responseBuilder = new StringBuilder();
responseBuilder.AppendWithCrCf("HTTP/1.1 400 Bad Request");
responseBuilder.AppendWithCrCf("Upgrade: WebSocket");
responseBuilder.AppendWithCrCf("Connection: Upgrade");
responseBuilder.AppendWithCrCf("Sec-WebSocket-Version: " + string.Join(", ", availableVersions.Select(i => i.ToString()).ToArray()));
responseBuilder.AppendWithCrCf();
m_SwitchResponse = Encoding.UTF8.GetBytes(responseBuilder.ToString());
}
public bool CanSendBinaryData { get { return false; } }
public ICloseStatusCode CloseStatusClode { get; set; }
public IProtocolProcessor NextProcessor { get; set; }
public bool Handshake(IWebSocketSession session, WebSocketReceiveFilterBase previousReader, out IReceiveFilter dataFrameReader)
{
dataFrameReader = null;
session.SendRawData(m_SwitchResponse, 0, m_SwitchResponse.Length);
return true;
}
public void SendMessage(IWebSocketSession session, string message)
{
throw new NotImplementedException();
}
public void SendData(IWebSocketSession session, byte[] data, int offset, int length)
{
throw new NotImplementedException();
}
public void SendCloseHandshake(IWebSocketSession session, int statusCode, string closeReason)
{
throw new NotImplementedException();
}
public void SendPong(IWebSocketSession session, byte[] pong)
{
throw new NotImplementedException();
}
public void SendPing(IWebSocketSession session, byte[] ping)
{
throw new NotImplementedException();
}
public int Version
{
get { return 0; }
}
public bool IsValidCloseCode(int code)
{
throw new NotImplementedException();
}
public bool TrySendMessage(IWebSocketSession session, string message)
{
throw new NotImplementedException();
}
public bool TrySendData(IWebSocketSession session, byte[] data, int offset, int length)
{
throw new NotImplementedException();
}
public IList> GetEncodedPackage(int opCode, byte[] data, int offset, int length)
{
throw new NotImplementedException();
}
public IList> GetEncodedPackage(int opCode, string message)
{
throw new NotImplementedException();
}
}
}