public async Task <ActionResult <Order> > CreateOrder([FromBody] Order orderToCreate) { // Assign customer id to the created order orderToCreate.CustomerId = int.Parse(User.Claims.FirstOrDefault(c => c.Type.Equals("id"))?.Value); var createdOrder = await _orderService.CreateOrderAsync(orderToCreate); // Broadcast order to all drivers Package package = new Package("OrderService", "AddOrder", JsonConvert.SerializeObject(createdOrder)); string jsonPackage = JsonConvert.SerializeObject(package); foreach (var ws in _manager.GetDriverSockets()) { if (ws.Value.Socket.State == WebSocketState.Open) { await ws.Value.Socket.SendAsync(Encoding.UTF8.GetBytes(jsonPackage), WebSocketMessageType.Text, true, CancellationToken.None); } } return(createdOrder); }
public async Task InvokeAsync(HttpContext context) { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); bool isDriver = false; var userId = int.Parse(context.Request.Query["id"]); if (context.Request.Path.ToString().ToLower() == "/driver") { _manager.AddDriverSocket(userId, webSocket); isDriver = true; Console.WriteLine($"New socket (driver) connection established (with user id: {userId})"); } else { _manager.AddSocket(userId, webSocket); Console.WriteLine($"New socket (customer) connection established (with user id: {userId})"); } //Send ConnID Back // await SendConnID(webSocket, conn); 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)); } else if (result.MessageType == WebSocketMessageType.Close) { WebSocketConnection webSocketConnection; if (isDriver) { WebSocketConnection foundWebSocket = _manager.GetDriverSockets().FirstOrDefault(s => s.Value.Socket == webSocket).Value; _manager.GetDriverSockets().TryRemove(foundWebSocket.SocketConnectionId, out webSocketConnection); } else { WebSocketConnection foundWebSocket = _manager.GetCustomerSockets().FirstOrDefault(s => s.Value.Socket == webSocket).Value; _manager.GetCustomerSockets().TryRemove(foundWebSocket.SocketConnectionId, out webSocketConnection); } Console.WriteLine($"Socket connection closed -> close for user id: {webSocketConnection?.UserId}"); await webSocketConnection.Socket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); } }); } else { Console.WriteLine("Not a websocket request"); await _next(context); } }