private void SentHandler(SegmentToken session) { if (OnSent != null) { OnSent(session); } }
private void ReceivedHanlder(SegmentToken session) { if (IsConnected == false) { string msg = encoding.GetString(session.Data.buffer, session.Data.offset, session.Data.size); acceptInfo = new WebsocketFrame().ParseAcceptedFrame(msg); if ((IsConnected = acceptInfo.IsHandShaked())) { resetEvent.Set(); if (OnConnected != null) { OnConnected(session.sToken, IsConnected); } } else { clientProvider.Disconnect(); } } else { WebsocketFrame packet = new WebsocketFrame(); bool isOk = packet.DecodingFromBytes(session.Data, true); if (isOk == false) { return; } if (packet.OpCode == 0x01) { if (OnReceived != null) { OnReceived(session.sToken, encoding.GetString(packet.Payload.buffer, packet.Payload.offset, packet.Payload.size)); } return; } else if (packet.OpCode == 0x08)//close { IsConnected = false; clientProvider.Disconnect(); } else if (packet.OpCode == 0x09)//ping { SendPong(session.Data); } else if (packet.OpCode == 0x0A)//pong { SendPing(); } if (OnReceivedBytes != null && packet.Payload.size > 0) { OnReceivedBytes(new SegmentToken(session.sToken, packet.Payload)); } } }
public HttpPayload GetDo(SegmentToken sToken) { return(new HttpPayload() { Header = header, HttpUri = new HttpUri(header.RelativeUri), Token = sToken.sToken }); }
public bool Send(SegmentToken segToken, bool waiting = true) { try { if (!segToken.sToken.TokenSocket.Connected) { return(false); } bool isWillEvent = true; ArraySegment <byte>[] segItems = sendBufferManager.BufferToSegments(segToken.Data.buffer, segToken.Data.offset, segToken.Data.size); foreach (var seg in segItems) { if (!segToken.sToken.TokenSocket.Connected) { return(false); } var tArgs = GetSocketAsyncFromSendPool(waiting, segToken.sToken.TokenSocket); if (tArgs == null) { return(false); } tArgs.UserToken = segToken.sToken; if (!sendBufferManager.WriteBuffer(tArgs, seg.Array, seg.Offset, seg.Count)) { sendTokenManager.Set(tArgs); throw new Exception(string.Format("发送缓冲区溢出...buffer block max size:{0}", sendBufferManager.BlockSize)); } isWillEvent &= segToken.sToken.SendAsync(tArgs); if (!isWillEvent) { ProcessSentCallback(tArgs); } if (sendTokenManager.Count < (sendTokenManager.Capacity >> 2)) { Thread.Sleep(5); } } return(isWillEvent); } catch (Exception ex) { Close(segToken.sToken); throw ex; } }
private void OnReceived(SegmentToken sToken) { if (hOnReceived != null) { HttpHeader header = new HttpHeader(sToken.Data); switch (header.Option) { case HttpOption.GET: hOnReceived(new HttpGet(header).GetDo(sToken)); break; case HttpOption.POST: hOnReceived(new HttpPost(header).GetDo(sToken)); break; } } }
public HttpPayload GetDo(SegmentToken sToken) { var paylaod = new HttpPayload() { Header = header, HttpUri = new HttpUri(header.RelativeUri), Token = sToken.sToken }; if (header.ContentLength > 0) { SegmentOffset seg = sToken.Data; paylaod.stream = new MemoryStream(seg.buffer, seg.offset + (int)header.StreamPosition, (int)header.ContentLength); } return(paylaod); }
public bool Send(SegmentToken segment) { return(sProvider.Send(segment)); }
private void ReceivedHandler(SegmentToken session) { var connection = ConnectionPool.Find(x => x.sToken.TokenId == session.sToken.TokenId); if (connection == null) { connection = new ConnectionInfo() { sToken = session.sToken }; ConnectionPool.Add(connection); } if (connection.IsHandShaked == false) { var serverFrame = new WebsocketFrame(); var access = serverFrame.GetHandshakePackage(session.Data); connection.IsHandShaked = access.IsHandShaked(); if (connection.IsHandShaked == false) { CloseAndRemove(connection); return; } connection.ConnectedTime = DateTime.Now; var rsp = serverFrame.RspAcceptedFrame(access); serverProvider.Send(new SegmentToken(session.sToken, rsp)); connection.accessInfo = access; if (OnAccepted != null) { OnAccepted(session.sToken); } } else { RefreshTimeout(session.sToken); WebsocketFrame packet = new WebsocketFrame(); bool isOk = packet.DecodingFromBytes(session.Data, true); if (isOk == false) { return; } if (packet.OpCode == 0x01)//text { if (OnReceived != null) { OnReceived(session.sToken, encoding.GetString(packet.Payload.buffer, packet.Payload.offset, packet.Payload.size)); } return; } else if (packet.OpCode == 0x08)//close { CloseAndRemove(connection); return; } else if (packet.OpCode == 0x09)//ping { SendPong(session); } else if (packet.OpCode == 0x0A)//pong { // SendPing(session.sToken); } if (OnReceivedBytes != null && packet.Payload.size > 0) { OnReceivedBytes(new SegmentToken(session.sToken, packet.Payload)); } } }
private void SendPong(SegmentToken session) { var buffer = new WebsocketFrame().ToSegmentFrame(session.Data, OpCodeType.Bong); serverProvider.Send(new SegmentToken(session.sToken, buffer)); }
public bool Send(SegmentToken session, bool waiting = true) { return(serverProvider.Send(session, waiting)); }
public int SendSync(SegmentToken segToken) { return(segToken.sToken.Send(segToken.Data)); }