private void ReceiveMessageFromClient(object client) //client { TcpClient tcpClient = (TcpClient)client; NetworkStream clientStream = tcpClient.GetStream(); byte[] fromClient = new byte[4096]; int bytesRead; while (true) { // olvas a klienstől ----- bytesRead = 0; Client kliens = Identify(tcpClient); try { //blocks until a client sends a message bytesRead = clientStream.Read(fromClient, 0, 4096); } catch (Exception ex) { connectedClients--; Console.WriteLine("Client disconnected! Number of clients: " + connectedClients); kliens.Disconnect(); clientList.Remove(kliens); break; //a socket error has occured } //message has been successfully received UTF8Encoding encoder = new UTF8Encoding(); // Convert the Bytes received to a string and display it on the Server Screen string csomag = encoder.GetString(fromClient, 0, bytesRead); string json = null; int jsonHossz = 0; int x = 0, y = 0; while (csomag[x] != '¤') { x++; } if (csomag.Substring(0, x).Contains("BEGINBEGIN")) { x++; y = x + 1; while (csomag[y] != '¤') { y++; } jsonHossz = Int32.Parse(csomag.Substring(x, y - x)); x = y + 1; y = x + 1; while (csomag[y] != '¤') { y++; } if (csomag.Substring(x, y - x).Length == jsonHossz && csomag.Contains("ENDEND")) { json = csomag.Substring(x, y - x); } } Message message = null; if (json != null) { message = JsonConvert.DeserializeObject <Message>(json); } else { Console.WriteLine("Incoming Message Error!"); } if (message != null) { if (kliens.UserType == "user") { if (message.head.STATUS.Equals("COMMAND") && message.head.STATUSCODE.Equals("MENU")) { if (message.body.MESSAGE.Equals("1")) { SendMessage(msgBuilder.eventList(evc), kliens); } else if (message.body.MESSAGE.Equals("2")) { SendMessage(msgBuilder.newOrder(), kliens); } else if (message.body.MESSAGE.Equals("3")) { SendMessage(msgBuilder.ordersList(kliens), kliens); } else if (message.body.MESSAGE.Equals("4")) { SendMessage(msgBuilder.payableList(kliens), kliens); } else if (message.body.MESSAGE.Equals("5")) { SendMessage(kliens.Logout(), kliens); } else if (message.body.MESSAGE.Equals("6")) { DisconnectClient(kliens); break; } else if (message.body.MESSAGE.Equals("")) { SendMessage(kliens.showMenu(), kliens); } } else if (message.head.STATUS.Equals("LOGIN")) { string[] userData = Regex.Split(message.body.MESSAGE, ","); SendMessage("Már korábban bejelentkezett, mint " + kliens.Username, kliens); } else if (message.head.STATUS.Equals("SEATMAP")) { SendMessage(msgBuilder.seatMap(Convert.ToInt32(message.body.MESSAGE)), kliens); } else if (message.head.STATUS.Equals("PAY")) { string[] results = (message.body.MESSAGE).Split(new char[] { ',', ':' }, StringSplitOptions.RemoveEmptyEntries); SendMessage(msgBuilder.paymentList(results, dbc, oc, lc, kliens), kliens); } else if (message.head.STATUS.Equals("ORDER")) { string[] orderString = Regex.Split(message.body.MESSAGE, ","); Event ev = evc.getEventByID(Convert.ToInt32(orderString[0])); int row = Convert.ToInt32(orderString[1]); int column = Convert.ToInt32(orderString[2]); if (ev != null) { if (row <= ev.Location.SeatRow && column <= ev.Location.SeatColumn) { if (dbc.reserveSeat(ev.Id, row, column, kliens.UserID)) { Order order = new Order(ev.PerformName, ev.Location.Name, ev.Start, kliens.Username); order.addSeat(new Seat(row, column)); if (kliens.MyOrder.newOrder(order) == false) { // KLIENS DIDNT ORDERED FOR THIS EVENT BEFORE dbc.newOrder(ev.Id, kliens.UserID); } oc.newOrder(order); ev.AvailSeats -= 1; SendMessage("Sikeresen foglalt jegyet a(z) " + ev.PerformName + " eseményre!", kliens); } else { SendMessage("A kiválasztott hely már foglalt.", kliens); } } else { SendMessage("A megadott hely nem létezik erre az előadásra!", kliens); } } else { SendMessage("Nincs ilyen esemény!", kliens); } } } else if (kliens.UserType == "admin") { if (message.head.STATUS.Equals("COMMAND") && message.head.STATUSCODE.Equals("MENU")) { if (message.body.MESSAGE.Equals("1")) { SendMessage(msgBuilder.eventList(evc), kliens); } else if (message.body.MESSAGE.Equals("2")) { SendMessage("Eladó felvételéhez adja meg a # karakter után a felhasználói nevét, jelszavát, nevét és hogy mióta dolgozik a cégnél.\nPélda: #seller,seller,Nagy Péter,2015-09-30", kliens); } else if (message.body.MESSAGE.Equals("3")) { SendMessage("Helyszín felvételéhez adja meg a + karakter után a helyszín nevét, az ott vásárolható jegyek árát, a nézőtér sorainak és oszlopainak számát.\nPélda: +Színpad,3000,20,18", kliens); } else if (message.body.MESSAGE.Equals("4")) { SendMessage("Esemény felvételéhez adja meg a + karakter után az előadás és helyszín nevét, az esemény időpontját.\nPélda: +Linkin Park,Színpad,2016-05-04 21:00", kliens); } else if (message.body.MESSAGE.Equals("5")) { SendMessage(kliens.Logout(), kliens); } else if (message.body.MESSAGE.Equals("6")) { DisconnectClient(kliens); break; } else if (message.body.MESSAGE.Equals("")) { SendMessage(kliens.showMenu(), kliens); } } else if (message.head.STATUS.Equals("COMMAND") && message.head.STATUSCODE.Equals("NEWSELLER")) { string[] data = Regex.Split(message.body.MESSAGE, ","); DataTable seller = dbc.findUserByName(data[0]); if (seller.Rows.Count > 0) { SendMessage("A megadott felhasználói név foglalt!", kliens); } else { dbc.registerUser(data[0], data[1], data[2]); seller = dbc.findUserByName(data[0]); int userID = Convert.ToInt32(seller.Rows[0].Field <Int64>("UserID")); dbc.registerSeller(data[3], userID); SendMessage("Eladó sikeresen felvéve!\n", kliens); } } else if (message.head.STATUS.Equals("COMMAND") && message.head.STATUSCODE.Equals("NEWLOCATION")) { string[] data = Regex.Split(message.body.MESSAGE, ","); Location loc = lc.findLocationByName(data[0]); if (loc != null) { SendMessage("Ez a helyszín már szerepel!", kliens); } else { lc.addLocation(new Location(lc.numOfLocations() + 1, data[0], Convert.ToInt32(data[1]), Convert.ToInt32(data[2]), Convert.ToInt32(data[3]))); dbc.newLocation(data[0], data[1], data[2], data[3]); SendMessage("Helyszín sikeresen hozzáadva!\n", kliens); } } else if (message.head.STATUS.Equals("COMMAND") && message.head.STATUSCODE.Equals("NEWEVENT")) { string[] data = Regex.Split(message.body.MESSAGE, ","); DataTable perform = dbc.findPerformByName(data[0]); if (perform.Rows.Count == 0) { dbc.newPerform(data[0]); } Event ev = evc.findEvent(data[0], data[1], DateTime.ParseExact(data[2], "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture)); if (ev != null) { SendMessage("Ez az esemény már szerepel!", kliens); } else { perform = dbc.findPerformByName(data[0]); Location loc = lc.findLocationByName(data[1]); if (loc == null) { SendMessage("Nem létező helyszín!", kliens); } else { evc.addEvent(new Event(evc.numOfEvents() + 1, perform.Rows[0].Field <string>("PerformName"), loc, DateTime.ParseExact(data[2], "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture), loc.SeatColumn * loc.SeatRow)); dbc.newEvent(Convert.ToInt32(perform.Rows[0].Field <Int64>("PerformID")), loc.Id, data[2], loc.SeatColumn * loc.SeatRow); SendMessage("Esemény sikeresen hozzáadva!", kliens); } } } } else if (kliens.UserType == "seller") { if (message.head.STATUS.Equals("COMMAND") && message.head.STATUSCODE.Equals("MENU")) { if (message.body.MESSAGE.Equals("1")) { SendMessage(msgBuilder.eventList(evc), kliens); } else if (message.body.MESSAGE.Equals("2")) { SendMessage(msgBuilder.verifyPayment(oc), kliens); } else if (message.body.MESSAGE.Equals("3")) { SendMessage(kliens.Logout(), kliens); } else if (message.body.MESSAGE.Equals("4")) { DisconnectClient(kliens); break; } else if (message.body.MESSAGE.Equals("")) { SendMessage(kliens.showMenu(), kliens); } } else if (message.head.STATUS.Equals("VERIFY")) { if (oc.verifyPayment(Convert.ToInt32(message.body.MESSAGE), dbc)) { SendMessage("Sikeres hitelesítés!", kliens); } else { SendMessage("Sikertelen hitelesítés!", kliens); } } } else { if (message.head.STATUS.Equals("COMMAND") && message.head.STATUSCODE.Equals("MENU")) { if (message.body.MESSAGE.Equals("1")) { SendMessage(msgBuilder.eventList(evc), kliens); } else if (message.body.MESSAGE.Equals("2")) { DisconnectClient(kliens); break; } else if (message.body.MESSAGE.Equals("")) { SendMessage(kliens.showMenu(), kliens); } } if (message.head.STATUS.Equals("LOGIN")) { string[] userData = Regex.Split(message.body.MESSAGE, ","); bool newLogin = true; if (kliens.UserID != 0) { newLogin = false; } SendMessage(kliens.Login(userData[0], userData[1], dbc), kliens); if (newLogin && kliens.UserID != 0) { kliens.MyOrder.readOrdersFromDb(kliens.UserID, kliens.Username, evc, dbc); } SendMessage(kliens.showMenu(), kliens); } else if (message.head.STATUS.Equals("REGISTER")) { string[] userData = Regex.Split(message.body.MESSAGE, ","); SendMessage(kliens.Register(userData[0], userData[1], userData[2], dbc), kliens); } } } } }