public async Task Invoke(HttpContext context, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler) { if (!context.WebSockets.IsWebSocketRequest) { await next(context); return; } if (context.Request.Path == "/ws") { //var auth = context.Request.Headers.Where(header => header.Key == "Authorization").FirstOrDefault(); //if (auth.Key == null || string.IsNullOrWhiteSpace(auth.Value)) //{ // context.Response.StatusCode = 401; // return; //} WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); CustomWebSocket userWebSocket = new CustomWebSocket() { WebSocket = webSocket, SocketId = new Random().Next(100000).ToString() }; wsFactory.Add(userWebSocket); await Listen(context, userWebSocket, wsFactory, wsmHandler); } else { context.Response.StatusCode = 400; return; } }
public async Task Invoke(HttpContext context, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler) { if (context.Request.Path == "/GetMarket") { if (context.WebSockets.IsWebSocketRequest) { string username = context.Request.Query["u"]; if (!string.IsNullOrEmpty(username)) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); CustomWebSocket userWebSocket = new CustomWebSocket() { WebSocket = webSocket, Username = username }; wsFactory.Add(userWebSocket); await wsmHandler.SendInitialMessages(userWebSocket); await Listen(context, userWebSocket, wsFactory, wsmHandler); } } else { context.Response.StatusCode = 400; } } await _next(context); }
public async Task Invoke(HttpContext context, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler) { if (context.Request.Path == "/ws") { if (context.WebSockets.IsWebSocketRequest) { string client = context.Request.Query["u"]; if (!string.IsNullOrEmpty(client) && wsFactory.IsClientUnique(client)) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); CustomWebSocket userWebSocket = new CustomWebSocket() { WebSocket = webSocket, Id = client }; wsFactory.Add(userWebSocket); await Listen(context, userWebSocket, wsFactory, wsmHandler); } } else { context.Response.StatusCode = 400; } } await _next(context); }
public async Task Invoke(HttpContext context, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler) { if (context.Request.Path == "/ws") { if (context.WebSockets.IsWebSocketRequest) { string username = context.Request.Query["u"]; if (!string.IsNullOrEmpty(username)) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); CustomWebSocket userWebSocket = new CustomWebSocket(webSocket, username + new Random().Next(0, 100)); wsFactory.Add(userWebSocket); await wsmHandler.HandleNewUserMessage(wsFactory); await Listen(context, userWebSocket, wsFactory, wsmHandler); } } else { context.Response.StatusCode = 400; } } await _next(context); }
public async Task Invoke(HttpContext context, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler) { if (context.Request.Path == "/ws") { if (context.WebSockets.IsWebSocketRequest) { string groupId = context.Request.Query["g"]; string friendlyName = context.Request.Query["f"]; string userId = context.Request.Query["u"]; if (!string.IsNullOrEmpty(groupId)) { var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var userWebSocket = new CustomWebSocket() { WebSocket = webSocket, GroupId = Guid.Parse(groupId), FriendlyName = friendlyName, UserId = userId, }; wsFactory.Add(userWebSocket); _logger.Log(LogLevel.Information, new EventId((int)LogEventId.User), $"User {userId} joined group {groupId}"); await wsmHandler.SendInitialMessageAsync(userWebSocket, wsFactory); await ListenAsync(context, userWebSocket, wsFactory, wsmHandler); } } else { context.Response.StatusCode = 400; } } await _nextAsync(context); }
/// <summary> /// 心跳类 /// </summary> public async Task Invoke(string Username, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler) { while (true) { try { System.Threading.Thread.Sleep(1000); List <CustomWebSocket> CustomWebSocketList = new List <CustomWebSocket>(); CustomWebSocketList = wsFactory.Others(Username); foreach (CustomWebSocket item in CustomWebSocketList) { if (item.WebSocket.State == WebSocketState.Aborted || item.WebSocket.State == WebSocketState.Closed) { wsFactory.Remove(item.Username); ClientWebSocket _webSocket = new ClientWebSocket(); CustomWebSocket userWebSocket = new CustomWebSocket() { WebSocket = _webSocket, Username = item.Username, UseSid = item.UseSid, Url = item.Url }; wsFactory.Add(userWebSocket); await wsmHandler.SendInitialMessages(userWebSocket); //await Listen(context, userWebSocket, wsFactory, wsmHandler); } } } catch (WebSocketException e) { // 产生 10035 == WSAEWOULDBLOCK 错误,说明被阻止了,但是还是连接的 //if (e.NativeErrorCode.Equals(10035)) //{ // return true; //} //else //{ // return false; //} } finally { //socket.Blocking = blockingState; // 恢复状态 } } }
public async Task Invoke(HttpContext context, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler) { if (context.Request.Path == "/ws") { if (context.Request.Headers.ContainsKey("Sec-WebSocket-Protocol")) { context.Response.Headers.Add("Sec-WebSocket-Protocol", "protocol1"); } if (context.WebSockets.IsWebSocketRequest) { string username = context.Request.Query["u"]; string token = context.Request.Query["token"]; //Log4netHelper.Info(this, "websokct进入,用户为:" + username); if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(token) && token.Length == 36) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); CustomWebSocket userWebSocket = new CustomWebSocket() { WebSocket = webSocket, Username = username, token = token }; wsFactory.Add(userWebSocket); wsFactory.RemoveInvalid(); await wsmHandler.SendInitialMessages(userWebSocket); await Listen(context, userWebSocket, wsFactory, wsmHandler); } } else { context.Response.StatusCode = 400; //Log4netHelper.Info(this, "不是websocket请求!"); } } else { await _next(context); } }
/// <summary> /// 连接 /// </summary> /// <param name="context"></param> /// <param name="wsFactory"></param> /// <param name="wsmHandler"></param> /// <returns></returns> public async Task Invoke(HttpContext context, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler, IAutomaticPostingFactory apFactory) { if (context.Request.Path == "/MesServiceStation") { Helperlog4.Info("新连接完成" + context.Request.Path.ToString()); if (context.WebSockets.IsWebSocketRequest) { System.Security.Principal.WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurrent(); string usesid = currentUser.User.ToString(); string customwebsocketS = context.Request.Query["username"]; //string username = usesid + "------Name"; if (!string.IsNullOrEmpty(customwebsocketS)) { CustomWebSocket customwebsocket = customwebsocketS.ConvertToObject <CustomWebSocket>(); WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); List <CustomWebSocket> CustomWebSocketList = new List <CustomWebSocket>(); CustomWebSocketList = wsFactory.Others(customwebsocket.Username); if (CustomWebSocketList.Count > 0) { CustomWebSocket userWebSocket1 = new CustomWebSocket(); userWebSocket1 = CustomWebSocketList[0]; wsFactory.Remove(userWebSocket1.Username); CustomWebSocket userWebSocket = new CustomWebSocket() { WebSocket = webSocket, Username = userWebSocket1.Username, UseSid = usesid, Url = context.Request.GetDisplayUrl(), UserType = userWebSocket1.UserType }; wsFactory.Add(userWebSocket); //await Heartbeat(wsFactory, wsmHandler); Helperlog4.Info("重新连接返回值" + userWebSocket.ConvertToJson()); await wsmHandler.SendInitialMessages(userWebSocket); await Listen(context, userWebSocket, wsFactory, wsmHandler, apFactory); } else { CustomWebSocket userWebSocket = new CustomWebSocket() { WebSocket = webSocket, Username = customwebsocket.Username, UseSid = usesid, Url = context.Request.GetDisplayUrl(), UserType = customwebsocket.UserType }; wsFactory.Add(userWebSocket); Helperlog4.Info("新连接返回值" + userWebSocket.ConvertToJson()); //await Heartbeat(wsFactory, wsmHandler); await wsmHandler.SendInitialMessages(userWebSocket); await Listen(context, userWebSocket, wsFactory, wsmHandler, apFactory); } } } else { context.Response.StatusCode = 400; } } await _next(context); }