public static IHandler BuildHandler( WebSocketHttpRequest request, Action <string> onMessage, Action onClose, Action <byte[]> onBinary, Action <byte[]> onPing, Action <byte[]> onPong) { var version = GetVersion(request); switch (version) { case "76": return(Draft76Handler.Create(request, onMessage)); case "7": case "8": case "13": return(Hybi13Handler.Create(request, onMessage, onClose, onBinary, onPing, onPong)); case "policy-file-request": return(FlashSocketPolicyRequestHandler.Create(request)); } throw new WebSocketException(WebSocketStatusCodes.UnsupportedDataType); }
public void Setup() { _request = new WebSocketHttpRequest(); _onClose = delegate { }; _onMessage = delegate { }; _handler = Hybi13Handler.Create(_request, s => _onMessage(s), () => _onClose()); }
public void ShouldCreateAnswerGuid() { const string exampleRequestKey = "dGhlIHNhbXBsZSBub25jZQ=="; const string expectedResult = "s3pPLMBiTxaQ9kYGzzhZRbK+xOo="; var actual = Hybi13Handler.CreateResponseKey(exampleRequestKey); Assert.AreEqual(expectedResult, actual); }
public static IHandler BuildHandler(WebSocketHttpRequest request, Action <string> onMessage, Fleck2Extensions.Action onClose, Action <byte[]> onBinary) { var version = GetVersion(request); switch (version) { case "76": return(Draft76Handler.Create(request, onMessage)); case "7": case "8": case "13": return(Hybi13Handler.Create(request, onMessage, onClose, onBinary)); } throw new WebSocketException(WebSocketStatusCodes.UnsupportedDataType); }
public static IHandler BuildHandler(WebSocketHttpRequest request, Action <string> onMessage, Action onClose) { var version = GetVersion(request); switch (version) { case "76": return(Draft76Handler.Create(request, onMessage)); case "7": return(Hybi13Handler.Create(request, onMessage, onClose)); case "8": return(Hybi13Handler.Create(request, onMessage, onClose)); case "13": return(Hybi13Handler.Create(request, onMessage, onClose)); } throw new WebSocketException("Unsupported Request"); }
public override void OnGet(HttpRequest request, HttpResponse response) { if (request.Upgrade == null || request.Upgrade.Trim().ToLower() != "websocket") { response.Send(); return; } lock (objLock) { if (IsOnSurveillance)//已经用客户端连接了 { response.SetContent("False"); //response.SetContent(JsonConvert.SerializeObject(hit)); //response.SendOnLongConnetion(); response.SendWebsocketData(); response.TcpClient.Close(); StopSurveillance(); //return; } } lock (objLock) { IsOnSurveillance = true; } if (request.RestConvention != null) { Log.Debug(string.Format("准备开始布控任务 布控ID{0}", request.RestConvention)); //根据p.restConvention(taskID)进行 //SurveillanceTask task = ; } HitAlertService.response = response; int id = -1; try { id = Convert.ToInt32(request.RestConvention); } catch { return; } if (!Init(id)) {//开启监控失败 Log.Debug("开启布控任务失败"); response.SetContent("False"); response.SendWebsocketData(); response.TcpClient.Close(); IsOnSurveillance = false; return; } ; byte[] buffer = new byte[1024]; FrameType type = FrameType.Continuation; while (type != FrameType.Close) { int length = 0; if (response.TcpClient.Connected) { length = response.TcpClient.Client.Receive(buffer);//等待客户端的数据,主要等待客户端发送关闭数据 } byte[] data = new byte[length]; Array.Copy(buffer, data, length); type = Hybi13Handler.GetFrameType(new List <byte>(data)); //FRSServerHttp.Server.Websocket.Hybi13Handler.ReceiveData(new List<byte>(data), readState); } StopSurveillance(); }