public void RemoveGroup(string groupName, IHttpListenerWebSocketContext context) { if (groups.TryGetValue(groupName, out List <IHttpListenerWebSocketContext> _ctxs)) { _ctxs.RemoveAll(f => f.SecWebSocketKey == context.SecWebSocketKey); } }
private async Task OnBeforeDisconnected(IHttpListenerWebSocketContext context) { if (context.WebSocket.State == WebSocketState.Connecting || context.WebSocket.State == WebSocketState.Open) { context.WebSocket.Abort(); } await OnDisconnected(context); }
public async Task SendToOther(IHttpListenerWebSocketContext context, string message, bool endOfMessage = true) { var otherClients = clients .Where(f => f.Key != context.SecWebSocketKey) .Select(f => f.Value) .ToList(); foreach (var otherContext in otherClients) { await Send(otherContext, message, endOfMessage); } }
public async Task Send(IHttpListenerWebSocketContext context, string message, bool endOfMessage = true) { try { byte[] buffer = new byte[options.BufferSize]; buffer = Encoding.UTF8.GetBytes(message); await context.WebSocket.SendAsync(buffer, WebSocketMessageType.Text, endOfMessage, new CancellationToken()); } catch (WebSocketException) { OnBeforeDisconnected(context); } }
public void AddGroup(string groupName, IHttpListenerWebSocketContext context) { if (groups.ContainsKey(groupName)) { if (groups.TryGetValue(groupName, out List <IHttpListenerWebSocketContext> _ctxs)) { _ctxs.Add(context); } } else { var ctxs = new List <IHttpListenerWebSocketContext>() { context }; groups.TryAdd(groupName, ctxs); } }
public override async Task OnMessage(IHttpListenerWebSocketContext context, string message) { var queries = message.Split('?', '&').ToList(); queries.RemoveAll(f => string.IsNullOrEmpty(f)); var firstQueryValue = queries[0].Split('=')[1]; var secondQueryValue = queries[1].Split('=')[1]; var clientMessage = string.Empty; if (queries.Count == 3) { clientMessage = queries[2].Split('=')[1]; } secondQueryValue = System.Web.HttpUtility.UrlDecode(secondQueryValue); switch (firstQueryValue) { case "AddGroup": AddGroup(secondQueryValue, context); break; case "RemoveGroup": RemoveGroup(secondQueryValue, context); break; case "SendGroup": SendToGroup(secondQueryValue, clientMessage, true); break; case "SendOther": SendToOther(context, clientMessage, true); break; case "Send": Send(context, clientMessage, true); break; default: break; } Console.WriteLine(context.SecWebSocketKey + ":" + message); }
public override async Task OnDisconnected(IHttpListenerWebSocketContext context) { Console.WriteLine(context.SecWebSocketKey + " Disconnected"); }
public virtual async Task OnDisconnected(IHttpListenerWebSocketContext context) { }
public virtual async Task OnMessage(IHttpListenerWebSocketContext context, string message) { }
public override Task OnConnected(IHttpListenerWebSocketContext context) { return(base.OnConnected(context)); }
public override Task OnMessage(IHttpListenerWebSocketContext context, string message) { return(base.OnMessage(context, message)); }
public Rocket(IHttpListenerWebSocketContext socketContext) { mSocketContext = socketContext; mSendLock = new SemaphoreSlim(1, 1); mReceiveLock = new SemaphoreSlim(1, 1); }
public override async Task OnConnected(IHttpListenerWebSocketContext context) { }
public override async Task OnMessage(IHttpListenerWebSocketContext context, string message) { }