public void start() { server.Start(); client = server.AcceptTcpClient(); netStream = client.GetStream(); signal = Convert.ToByte(netStream.ReadByte()); if (signal == Signal.LIST_REQUEST) //if client send request for list { foreach (Item item in database) //send each item in db to client { netStream.WriteByte(Signal.LIST_SEND_MORE); //client continue receiving string data = item.ToString(); dataSend = Encoding.ASCII.GetBytes(data); netStream.Write(dataSend, 0, data.Length); } } netStream.WriteByte(Signal.LIST_SEND_FIN); //signal client finished sending list signal = Convert.ToByte(netStream.ReadByte()); if (signal == Signal.ORDER_RTS) { signal = Convert.ToByte(netStream.ReadByte()); while (signal != Signal.ORDER_SEND_FIN) { if (signal == Signal.ORDER_SEND_MORE) { dataSize = netStream.Read(dataReceive, 0, BUFFER_SIZE); string data = Encoding.ASCII.GetString(dataReceive, 0, dataSize); order.Add(Item.GetObject(data)); } signal = Convert.ToByte(netStream.ReadByte()); } } if (signal == Signal.PAYMENT_REQUEST) { int totalPayment = 0; foreach (Item item in order) { totalPayment += database.Where(i => i.Id == item.Id).First().Price *item.Stock; } dataSend = BitConverter.GetBytes(totalPayment); netStream.Write(dataSend, 0, sizeof(int)); } }