public void SendNow(WebSocketFrame frame) { if (frame == null) { throw new ArgumentNullException("frame is null!"); } if (closed || closeSent) { return; } byte[] rawData = frame.Get(); Stream.Write(rawData, 0, rawData.Length); Stream.Flush(); }
/// <summary> /// It will send the given frame to the server. /// </summary> public void Send(WebSocketFrame frame) { if (frame == null) { throw new ArgumentNullException("frame is null!"); } if (closed) { return; } byte[] rawData = frame.Get(); lock (SendLock) { Stream.Write(rawData, 0, rawData.Length); Stream.Flush(); if (frame.Type == WebSocketFrameTypes.ConnectionClose) { closeSent = true; } } }
private void SendThreadFunc(object param) { List <WebSocketFrame> localFrames = new List <WebSocketFrame>(); try { while (!closed && !closeSent) { if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) { HTTPManager.Logger.Information("WebSocketResponse", "SendThread - Waiting..."); } newFrameSignal.WaitOne(); try { lock (SendLock) { // add frames reversed in order for (int i = this.unsentFrames.Count - 1; i >= 0; --i) { localFrames.Add(this.unsentFrames[i]); } this.unsentFrames.Clear(); } if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) { HTTPManager.Logger.Information("WebSocketResponse", "SendThread - Wait is over, " + localFrames.Count.ToString() + " new frames!"); } while (localFrames.Count > 0) { WebSocketFrame frame = localFrames[localFrames.Count - 1]; localFrames.RemoveAt(localFrames.Count - 1); if (!closeSent) { byte[] rawData = frame.Get(); Stream.Write(rawData, 0, rawData.Length); Stream.Flush(); if (frame.Type == WebSocketFrameTypes.ConnectionClose) { closeSent = true; } } Interlocked.Add(ref this._bufferedAmount, -frame.Data.Length); } } catch (Exception ex) { if (HTTPUpdateDelegator.IsCreated) { this.baseRequest.Exception = ex; this.baseRequest.State = HTTPRequestStates.Error; } else { this.baseRequest.State = HTTPRequestStates.Aborted; } closed = true; } } } finally { sendThreadCreated = false; HTTPManager.Logger.Information("WebSocketResponse", "SendThread - Closed!"); } }