public async Task <IList <Merchandise> > GetMerchandisesRequest() { byte[] buffer = new byte[20000]; ArraySegment <byte> segment = new ArraySegment <byte>(buffer); GetMerchandisesRequest request = new GetMerchandisesRequest("get_merchandises"); string requestJson = JsonConvert.SerializeObject(request, Formatting.Indented); await _clientWebSocket.SendAsync(requestJson); bool gotCorrectResponse = false; string message = ""; while (!gotCorrectResponse) { WebSocketReceiveResult result = _clientWebSocket.ClientWebSocket.ReceiveAsync(segment, _timeOut).Result; if (result.MessageType == WebSocketMessageType.Close) { _clientWebSocket.Disconnect(); throw new Exception("Disconnected. Close message"); } int count = result.Count; while (!result.EndOfMessage) { if (count >= buffer.Length) { _clientWebSocket.Disconnect(); throw new Exception("Disconnected. Buffer overloaded"); } segment = new ArraySegment <byte>(buffer, count, buffer.Length - count); result = _clientWebSocket.ClientWebSocket.ReceiveAsync(segment, _timeOut).Result; count += result.Count; } message = Encoding.UTF8.GetString(buffer, 0, count); WebMessageBase baseResponse = JsonConvert.DeserializeObject <WebMessageBase>(message); if (baseResponse.Tag == "get_merchandises") { gotCorrectResponse = true; if (baseResponse.Status != MessageStatus.SUCCESS) { throw new Exception(baseResponse.Message); } } } GetMerchandisesResponse response = JsonConvert.DeserializeObject <GetMerchandisesResponse>(message); return(response.Merchandises.FromCommModel()); }
private async Task <string> ProcessGetMerchandisesRequest(GetMerchandisesRequest request) { try { List <MerchandiseDto> merchandiseDtos = (await _orderService.MerchandiseService.GetMerchandises()).ToList(); GetMerchandisesResponse merchandisesResponse = new GetMerchandisesResponse("get_merchandises", merchandiseDtos.FromDto()); string result = JsonConvert.SerializeObject(merchandisesResponse, Formatting.Indented); return(result); } catch (Exception e) { WebMessageBase response = new WebMessageBase(); response.Status = MessageStatus.FAIL; response.Message = "Get merchandise request error."; string result = JsonConvert.SerializeObject(response, Formatting.Indented); _log("During processing get_merchandises request an error occured: " + e.Message); return(result); } }
public async Task <string> Resolve(string message, WebSocketConnection ws) { WebMessageBase request = JsonConvert.DeserializeObject <WebMessageBase>(message); Console.WriteLine("[{0}] Resolving request: \"{1}\", status: {2}", DateTime.Now.ToString("HH:mm:ss.fff"), request.Tag, request.Status); string output = String.Empty; switch (request.Tag) { case "get_customer": { GetCustomerRequest customerRequest = JsonConvert.DeserializeObject <GetCustomerRequest>(message); output = await ProcessGetCustomerRequest(customerRequest); break; } case "get_merchandises": { GetMerchandisesRequest merchandiseRequest = JsonConvert.DeserializeObject <GetMerchandisesRequest>(message); output = await ProcessGetMerchandisesRequest(merchandiseRequest); break; } case "get_order": { GetOrderRequest ordeRequest = JsonConvert.DeserializeObject <GetOrderRequest>(message); output = await ProcessGetOrderRequest(ordeRequest); break; } case "make_order": { OrderRequestResponse orderRequest = JsonConvert.DeserializeObject <OrderRequestResponse>(message); output = await ProcessMakeOrderRequest(orderRequest); break; } case "subscription": { WebMessageBase subRequest = JsonConvert.DeserializeObject <WebMessageBase>(message); output = await ProcessSubscriptionRequest(subRequest, ws); break; } case "unsubscription": { WebMessageBase unSubRequest = JsonConvert.DeserializeObject <WebMessageBase>(message); output = await ProcessUnsubscriptionRequest(unSubRequest, ws); break; } } return(output); }