#if !BESTHTTP_DISABLE_WEBSOCKET using System; using BestHTTP.PlatformSupport.Memory; #if !UNITY_WEBGL || UNITY_EDITOR using BestHTTP.WebSocket.Frames; #endif namespace BestHTTP.WebSocket { /// /// States of the underlying implementation's state. /// public enum WebSocketStates : byte { Connecting = 0, Open = 1, Closing = 2, Closed = 3, Unknown }; public delegate void OnWebSocketOpenDelegate(WebSocket webSocket); public delegate void OnWebSocketMessageDelegate(WebSocket webSocket, string message); public delegate void OnWebSocketBinaryDelegate(WebSocket webSocket, byte[] data); public delegate void OnWebSocketBinaryNoAllocDelegate(WebSocket webSocket, BufferSegment data); public delegate void OnWebSocketClosedDelegate(WebSocket webSocket, UInt16 code, string message); public delegate void OnWebSocketErrorDelegate(WebSocket webSocket, string reason); #if !UNITY_WEBGL || UNITY_EDITOR public delegate void OnWebSocketIncompleteFrameDelegate(WebSocket webSocket, WebSocketFrameReader frame); #endif public abstract class WebSocketBaseImplementation { public virtual WebSocketStates State { get; protected set; } public virtual bool IsOpen { get; protected set; } public virtual int BufferedAmount { get; protected set; } #if !UNITY_WEBGL || UNITY_EDITOR public HTTPRequest InternalRequest { get { if (this._internalRequest == null) CreateInternalRequest(); return this._internalRequest; } } protected HTTPRequest _internalRequest; public virtual int Latency { get; protected set; } public virtual DateTime LastMessageReceived { get; protected set; } #endif public WebSocket Parent { get; } public Uri Uri { get; protected set; } public string Origin { get; } public string Protocol { get; } public WebSocketBaseImplementation(WebSocket parent, Uri uri, string origin, string protocol) { this.Parent = parent; this.Uri = uri; this.Origin = origin; this.Protocol = protocol; #if !UNITY_WEBGL || UNITY_EDITOR this.LastMessageReceived = DateTime.MinValue; // Set up some default values. this.Parent.PingFrequency = 1000; this.Parent.CloseAfterNoMessage = TimeSpan.FromSeconds(2); #endif } public abstract void StartOpen(); public abstract void StartClose(UInt16 code, string message); public abstract void Send(string message); public abstract void Send(byte[] buffer); public abstract void Send(byte[] buffer, ulong offset, ulong count); #if !UNITY_WEBGL || UNITY_EDITOR protected abstract void CreateInternalRequest(); /// /// It will send the given frame to the server. /// public abstract void Send(WebSocketFrame frame); #endif } } #endif