You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.5 KiB
59 lines
1.5 KiB
#if !NET20
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Apewer.WebSocket
|
|
{
|
|
internal class ComposableHandler
|
|
{
|
|
public Func<string, byte[]> Handshake = s => new byte[0];
|
|
public Func<string, byte[]> TextFrame = x => new byte[0];
|
|
public Func<byte[], byte[]> BytesFrame = x => new byte[0];
|
|
public Action<List<byte>> ReceiveData = delegate { };
|
|
public Func<byte[], byte[]> PingFrame = i => new byte[0];
|
|
public Func<byte[], byte[]> PongFrame = i => new byte[0];
|
|
public Func<int, byte[]> CloseFrame = i => new byte[0];
|
|
|
|
private readonly List<byte> _data = new List<byte>();
|
|
|
|
public byte[] CreateHandshake(string subProtocol = null)
|
|
{
|
|
return Handshake(subProtocol);
|
|
}
|
|
|
|
public void Receive(IEnumerable<byte> data)
|
|
{
|
|
_data.AddRange(data);
|
|
|
|
ReceiveData(_data);
|
|
}
|
|
|
|
public byte[] FrameText(string text)
|
|
{
|
|
return TextFrame(text);
|
|
}
|
|
|
|
public byte[] FrameBytes(byte[] bytes)
|
|
{
|
|
return BytesFrame(bytes);
|
|
}
|
|
|
|
public byte[] FramePing(byte[] bytes)
|
|
{
|
|
return PingFrame(bytes);
|
|
}
|
|
|
|
public byte[] FramePong(byte[] bytes)
|
|
{
|
|
return PongFrame(bytes);
|
|
}
|
|
|
|
public byte[] FrameClose(int code)
|
|
{
|
|
return CloseFrame(code);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|