public async Task InvokeAsync(HttpContext context) { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); Console.WriteLine("WebSocket Connected"); string ConnID = _manager.AddSocket(webSocket); await SendConnIDAsync(webSocket, ConnID); await ReceiveMessage(webSocket, async (result, buffer) => { if (result.MessageType == WebSocketMessageType.Text) { Console.WriteLine("Message Received"); Console.WriteLine($"Message: {Encoding.UTF8.GetString(buffer, 0, result.Count)}"); await RouteJSONMessageAsync(Encoding.UTF8.GetString(buffer, 0, result.Count)); } else if (result.MessageType == WebSocketMessageType.Close) { string id = _manager.getAllSockets().FirstOrDefault(s => s.Value == webSocket).Key; Console.WriteLine("Received close message!"); _manager.getAllSockets().TryRemove(id, out WebSocket sock); await sock.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); return; } }); } else { Console.WriteLine("Hello from the 2rd request delegate."); await _next(context); } }
public async Task InvokeAsync(HttpContext context) { WriteRequestParam(context); if (context.WebSockets.IsWebSocketRequest) { var webSocket = await context.WebSockets.AcceptWebSocketAsync(); Console.WriteLine("WebSocket Connected"); await SendConnIdAsync(webSocket, _manager.AddSocket(webSocket)); await ReceiveMessage(webSocket, async (result, bytes) => { switch (result.MessageType) { case WebSocketMessageType.Text: var message = Encoding.UTF8.GetString(bytes, 0, result.Count); Console.WriteLine($"Message received: {message}"); await RouteJsonMessageAsync(message); break; case WebSocketMessageType.Close: Console.WriteLine("Received close message"); var connId = _manager.GetAllSockets().FirstOrDefault(pair => pair.Value == webSocket).Key; _manager.GetAllSockets().TryRemove(connId, out var ws); if (ws != null) { await ws.CloseAsync( result.CloseStatus ?? WebSocketCloseStatus.Empty, result.CloseStatusDescription, CancellationToken.None); } break; case WebSocketMessageType.Binary: break; default: throw new ArgumentOutOfRangeException(); } }); } else { Console.WriteLine("Coming from the request"); await _next(context); Console.WriteLine("Coming from the response"); WriteResponseParam(context); } }
public async Task InvokeAsync(HttpContext context) { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); string ConnID = _manager.AddSocket(webSocket); await SendConnIDAsync(webSocket, ConnID); //Call to new method here Console.WriteLine("WebSocket Connected"); var socketCount = this._manager.GetAllSockets(); Console.WriteLine($"There are: {socketCount.Count()} sockets connection"); await Receive(webSocket, async (result, buffer) => { if (result.MessageType == WebSocketMessageType.Text) { Console.WriteLine($"Receive->Text"); Console.WriteLine($"Message: {Encoding.UTF8.GetString(buffer, 0, result.Count)}"); await RouteJSONMessageAsync(Encoding.UTF8.GetString(buffer, 0, result.Count)); return; } else if (result.MessageType == WebSocketMessageType.Close) { string id = _manager.GetAllSockets().FirstOrDefault(s => s.Value == webSocket).Key; Console.WriteLine($"Receive->Close"); _manager.GetAllSockets().TryRemove(id, out WebSocket sock); Console.WriteLine("Managed Connections: " + _manager.GetAllSockets().Count.ToString()); await sock.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); return; } }); } else { Console.WriteLine("Hello from 2nd Request Delegate - No WebSocket"); await _next(context); } }
public async Task InvokeAsync(HttpContext context) { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); // a WebSocket connection is built var connID = _manager.AddSocket(webSocket); await SendConnIDAsync(webSocket, connID); await ReceiveMessage(webSocket, async (result, buffer) => { if (result.MessageType == WebSocketMessageType.Text) { Console.WriteLine($"Receive -> Text"); Console.WriteLine($"Message: {Encoding.UTF8.GetString(buffer, 0, result.Count)}"); await RouteJSONMessageAsync(Encoding.UTF8.GetString(buffer, 0, result.Count)); return; } else if (result.MessageType == WebSocketMessageType.Close) { var id = _manager.GetAllSockets().FirstOrDefault(s => s.Value == webSocket).Key; Console.WriteLine($"Receive -> Close"); _manager.GetAllSockets().TryRemove(id, out WebSocket sockt); // pass "out" the WebSocket we want Console.WriteLine("Managed Connections: " + _manager.GetAllSockets().Count.ToString()); await sockt.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); return; } }); } else { Console.WriteLine("Hello from 2nd request delegate - Not WebSocket"); await _next(context); // call the next Request Delegate } }
public async Task InvokeAsync(HttpContext context) { if (context.WebSockets.IsWebSocketRequest) //checks if it's a websocket, if so we create websocket object with await context.web..... { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); //async method, may take time, accepts requests Console.WriteLine("WebSocket Connected"); string ConnID = _manager.AddSocket(webSocket); await SendConnIDAsync(webSocket, ConnID); await ReceiveMessage(webSocket, async(result, Buffer) => //message receiver { if (result.MessageType == WebSocketMessageType.Text) //chekcs if types are correct { Console.WriteLine("Message Recieved"); Console.WriteLine($"Message: {Encoding.UTF8.GetString(Buffer, 0, result.Count)}"); //decoding a buffer using UTF8 await RounteJSONMessageAsync(Encoding.UTF8.GetString(Buffer, 0, result.Count)); return; } else if (result.MessageType == WebSocketMessageType.Close) //closes if requested { string id = _manager.GetAllSockets().FirstOrDefault(s => s.Value == webSocket).Key; Console.WriteLine("Recieved Close message"); _manager.GetAllSockets().TryRemove(id, out WebSocket sock); //takes id, finds it, and passes out a socket that we can close await sock.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); return; } }); } else { Console.WriteLine("Hello from the 2rd request delegate."); //runs when i go to http://localhost5000 await _next(context); //creates next request delegate in the pipeline } }
public async Task InvokeAsync(HttpContext context) { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); Console.WriteLine("Connected"); string connId = _manager.AddSocket(webSocket); await SendConnectionIdAsync(webSocket, connId); await ReceiveMessage(webSocket, async (result, buffer) => { //also have byte[] if (result.MessageType == WebSocketMessageType.Text) { Console.WriteLine($"Message: {Encoding.UTF8.GetString(buffer, 0, result.Count)}"); await RouteJsonMessageAsync(Encoding.UTF8.GetString(buffer, 0, result.Count)); return; } else if (result.MessageType == WebSocketMessageType.Close) { string id = _manager.GetAllSockets().FirstOrDefault(x => x.Value == webSocket).Key; _manager.GetAllSockets().TryRemove(id, out WebSocket sock); await sock.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); Console.WriteLine("Rx close message"); return; } }); } else { Console.WriteLine("Hello from 2nd request delegate"); await _next(context); } }
public async Task InvokeAsync(HttpContext context) { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); bool clientEstablished = false; await Receive(webSocket, async (result, buffer) => { if (clientEstablished == false && result.MessageType == WebSocketMessageType.Text) { _manager.AddSocket(Encoding.UTF8.GetString(buffer, 0, result.Count), webSocket); clientEstablished = true; string username = Encoding.UTF8.GetString(buffer, 0, result.Count); await webSocket.SendAsync(Encoding.UTF8.GetBytes("{\"eventV\": \"setProfilePhoto\", \"user\": \"" + username + "\", \"photoBytes\": \"" + ProfilePhoto.GetImage(username) + "\"}"), WebSocketMessageType.Text, true, CancellationToken.None); FriendsList.SetOnline(username, "true"); List <string> obj = new List <string>() { username, FriendsList.GetStatus(username) }; List <string> friends = FriendsList.GetFriends(username).Split(GlobalVar.delimiterChars, System.StringSplitOptions.RemoveEmptyEntries).OfType <string>().ToList(); foreach (string friend in friends) { await RouteJSONMessageAsync("setStatus", obj, friend); try { await webSocket.SendAsync(Encoding.UTF8.GetBytes("{\"eventV\": \"setProfilePhoto\", \"user\": \"" + friend + "\", \"photoBytes\": \"" + ProfilePhoto.GetImage(friend) + "\"}"), WebSocketMessageType.Text, true, CancellationToken.None); } catch { Console.WriteLine("Error Loading {0}'s Profile Photo!", friend); } } Console.WriteLine($"WebSocket Operation: Client->EstablishedConnection"); Console.WriteLine("\nSet the status of: {0}\tChanged to: online", obj[0]); } else { if (result.MessageType == WebSocketMessageType.Text) { List <string> obj = new List <string>(); dynamic jsonObj = JObject.Parse(Encoding.UTF8.GetString(buffer, 0, result.Count)); string job = jsonObj.job; switch (job) { case ("sendMessage"): obj.Add((jsonObj.message).ToString()); obj.Add((jsonObj.sender).ToString()); obj.Add((jsonObj.receiver).ToString()); obj.Add(GlobalVar.currentDateMsg()); obj.Add((jsonObj.ghostMode).ToString()); Console.WriteLine(obj[4].ToString()); Console.WriteLine("Operation:\tsendMessage\n"); await RouteJSONMessageAsync(job, obj, obj[2]); break; case ("setStatus"): obj.Add((jsonObj.sender).ToString()); obj.Add((jsonObj.status).ToString()); Console.WriteLine("Operation:\tsetStatus\n"); List <string> friends = FriendsList.GetFriends(obj[0]).Split(GlobalVar.delimiterChars, System.StringSplitOptions.RemoveEmptyEntries).OfType <string>().ToList(); foreach (string friend in friends) { await RouteJSONMessageAsync(job, obj, friend); } break; case ("addFriendReq"): obj.Add((jsonObj.sender).ToString()); obj.Add((jsonObj.receiver).ToString()); Console.WriteLine("Operation:\taddFriendReq\n"); if (KeyTagID.GetUserExists(obj[1])) { FriendsList flAFR = new FriendsList("ADDFR", obj[0], obj[1], KeyTagID.GrabUserKeyTag(obj[0])); await webSocket.SendAsync(Encoding.UTF8.GetBytes("{\"eventV\": \"userExists\", \"existsV\": true, \"user\": \"" + obj[1].ToString() + "\"}"), WebSocketMessageType.Text, true, CancellationToken.None); await RouteJSONMessageAsync(job, obj, obj[1]); } else { await webSocket.SendAsync(Encoding.UTF8.GetBytes("{\"eventV\": \"userExists\", \"existsV\": false}"), WebSocketMessageType.Text, true, CancellationToken.None); } break; case ("cancelFriendReq"): obj.Add((jsonObj.sender).ToString()); obj.Add((jsonObj.receiver).ToString()); Console.WriteLine("Operation:\tcancelFriendReq\n"); FriendsList flRFR = new FriendsList("REMOVEFR", obj[0], obj[1], KeyTagID.GrabUserKeyTag(obj[0])); await RouteJSONMessageAsync(job, obj, obj[1]); break; case ("acceptFriendReq"): obj.Add((jsonObj.sender).ToString()); obj.Add((jsonObj.receiver).ToString()); obj.Add(ProfilePhoto.GetImage(obj[0])); Console.WriteLine("Operation:\tacceptFriendReq\n"); FriendsList flACFR = new FriendsList("ACCEPTFR", obj[0], obj[1], KeyTagID.GrabUserKeyTag(obj[0])); await RouteJSONMessageAsync(job, obj, obj[1]); await webSocket.SendAsync(Encoding.UTF8.GetBytes("{\"eventV\": \"setProfilePhoto\", \"user\": \"" + obj[0] + "\", \"photoBytes\": \"" + ProfilePhoto.GetImage(obj[1]) + "\"}"), WebSocketMessageType.Text, true, CancellationToken.None); break; case ("declineFriendReq"): obj.Add((jsonObj.sender).ToString()); obj.Add((jsonObj.receiver).ToString()); Console.WriteLine("Operation:\tdeclineFriendReq\n"); FriendsList flDFR = new FriendsList("DECLINEFR", obj[0], obj[1], 0); await RouteJSONMessageAsync(job, obj, obj[1]); break; case ("removeFriend"): obj.Add((jsonObj.sender).ToString()); obj.Add((jsonObj.receiver).ToString()); Console.WriteLine("Operation:\removeFriend\n"); FriendsList flRF = new FriendsList("REMOVE", obj[0], obj[1], 0); await RouteJSONMessageAsync(job, obj, obj[1]); break; case ("setProfilePhoto"): obj.Add((jsonObj.sender).ToString()); obj.Add((jsonObj.photoBytes).ToString()); Console.WriteLine("Operation:\tsetProfilePhoto\n"); ProfilePhoto.SaveImage(obj[0], obj[1]); List <string> friendsPP = FriendsList.GetFriends(obj[0]).Split(GlobalVar.delimiterChars, System.StringSplitOptions.RemoveEmptyEntries).OfType <string>().ToList(); foreach (string friend in friendsPP) { await RouteJSONMessageAsync(job, obj, friend); } break; } obj.Clear(); } else if (result.MessageType == WebSocketMessageType.Close) { string id = _manager.GetAllSockets().FirstOrDefault(s => s.Value == webSocket).Key; _manager.GetAllSockets().TryRemove(id, out WebSocket sock); await sock.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); List <string> obj = new List <string>(); obj.Add(id); obj.Add("offline"); List <string> friends = FriendsList.GetFriends(obj[0]).Split(GlobalVar.delimiterChars, System.StringSplitOptions.RemoveEmptyEntries).OfType <string>().ToList(); foreach (string friend in friends) { await RouteJSONMessageAsync("setStatusOffline", obj, friend); } FriendsList.SetOnline(id, "false"); Console.WriteLine("\nSet the status of: {0}\tChanged to: {1}", obj[0], obj[1]); Console.WriteLine($"WebSocket Operation: Receive->Close"); } } requestCount++; Console.WriteLine("\nRequest #: " + requestCount + "\nManaged Connections: " + _manager.GetAllSockets().Count.ToString()); Console.WriteLine("\n\n" + GlobalVar.border + "\n"); return; }); } else { await _next(context); } }