private void TransferOrder(Order order) { TransferView transferView = new TransferView(); transferView.Order = order; transferView.ShowInTaskbar = false; transferView.ShowDialog(); if (transferView.ModalResul) { foreach (var servingCourse in order.DisplayGroups) { foreach (var item in servingCourse.Items) { DbOrderItem.UpdateItemOnTransfer(item.OrderItemKey, transferView.SelectedTerminal.TerminalId, OrderStatus.Transfered); } } TcpStreamSender transferStream = new TcpStreamSender(); TcpStreamMessage transferMessage = new TcpStreamMessage(transferView.SelectedTerminal.TerminalIpAddress, inMessageType: TcpStreamMessageType.Order); transferMessage.AddData(order.OrderKey); var transferSuccessful = transferStream.SendMessage(transferMessage); if (transferSuccessful) { ChefmateController.Instance.AnalyticalData.TotalOrdersCount--; ChefmateController.Instance.AnalyticalData.CurrentOrdersCount--; ChefmateController.Instance.AnalyticalData.CurrentItems -= order.Items.Count; ChefmateController.Instance.RemoveOrder(order); PublishRedrawEvent(); } } }
private void SetMessageTypeFromStream(ref MemoryStream stream, ref TcpStreamMessage streamMessage) { int intMessageType = 0; streamMessage.MessageType = GetInt32FromStream(stream, out intMessageType) ? (TcpStreamMessageType)intMessageType : TcpStreamMessageType.None; }
private void SendItemKey(int orderItemKey) { TcpStreamMessage message = new TcpStreamMessage(); message.SetIpAddressFromString(_outputTerminal.TerminalIpAddress); message.AddData(orderItemKey); message.MessageType = TcpStreamMessageType.Item; SendTcpMessage(message); }
bool IsMessageContainsDbKey(ref TcpStreamMessage streamMessage) { bool result = false; int value = 0; result = GetInt32FromStream(streamMessage.DataStream, out value); return(result); }
private bool ValidateMessageData(ref TcpStreamMessage streamMessage) { bool result = false; // validation 1 : check whether the stream contains an integer for db key result = IsMessageContainsDbKey(ref streamMessage); // reset the data stream position to begining streamMessage.DataStream.Position = 0; return(result); }
private void SetMessageDataFromStream(ref MemoryStream stream, ref TcpStreamMessage streamMessage) { // copy the rest of the data to the message's data stream stream.CopyTo(streamMessage.DataStream); streamMessage.DataStream.Position = 0; if (!ValidateMessageData(ref streamMessage)) { throw new Exception("Message data stream is invalid"); } }
protected override void OnDataReceived(object sender, StreamReceiverEventArgs streamArgs) { TcpStreamMessage streamMessage = new TcpStreamMessage(); // create a copy of stream data MemoryStream stream = streamArgs.Stream; // decode the stream into data DecodeStreamToMessage(ref stream, ref streamMessage); if (streamMessage.MessageType != TcpStreamMessageType.None) { streamArgs.Response = GetResponseMessage(streamMessage.MessageType); RaiseMessageRecievedEvents(streamMessage); } }
private void DecodeStreamToMessage(ref MemoryStream stream, ref TcpStreamMessage streamMessage) { try { stream.Position = 0; // it is essential to read the message type first and then the data in that order. // as we encode them in that order when we send the data SetMessageTypeFromStream(ref stream, ref streamMessage); SetMessageDataFromStream(ref stream, ref streamMessage); } catch { streamMessage.MessageType = TcpStreamMessageType.None; streamMessage.DataStream.Close(); // todo: log exceptions } }
private void RaiseMessageRecievedEvents(TcpStreamMessage streamMessage) { int dbKey = 0; GetInt32FromStream(streamMessage.DataStream, out dbKey); switch (streamMessage.MessageType) { case TcpStreamMessageType.Order: RaiseDbMessageReceivedEvent(DbMessageType.Order, dbKey); break; case TcpStreamMessageType.Group: RaiseDbMessageReceivedEvent(DbMessageType.Group, dbKey); break; case TcpStreamMessageType.Item: RaiseDbMessageReceivedEvent(DbMessageType.Item, dbKey); break; default: break; } }
private void SendTcpMessage(TcpStreamMessage message) { TcpStreamSender tcpStreamSender = new TcpStreamSender(); tcpStreamSender.SendMessage(message); }