private static void InputNumber(Data.Packet packet) { bool isNumber; do { if (gameRunning == false) { break; } int number; Console.WriteLine("Podaj liczbe:"); var msg = Console.ReadLine(); if (int.TryParse(msg, out number)) { Data.Packet packetToSend = new Data.Packet(packet.ID, number, OD_Enum.NULL, OP_Enum.GUESS); var stringToSend = packetToSend.Serialize(); byte[] bytesToSend = Encoding.UTF8.GetBytes(stringToSend); _udpClient.Send(bytesToSend, bytesToSend.Length); isNumber = true; } else { Console.WriteLine("Nie podałeś liczby"); isNumber = false; } } while (!isNumber && gameRunning); }
private static void Guessing(Data.Packet packet, IPEndPoint endPoint) { if (packet.Data == numberToGuess) { Data.Packet packetToSend = new Data.Packet(packet.ID, 0, OD_Enum.GUESSED, OP_Enum.GUESS); string stringToSend = packetToSend.Serialize(); byte[] bytesToSend = Encoding.UTF8.GetBytes(stringToSend); _listener.Send(bytesToSend, bytesToSend.Length, endPoint); gameRunning = false; timer.Change(Timeout.Infinite, Timeout.Infinite); foreach (var playerData in _players) { if (!playerData.Value.PlayerEndPoint.Equals(endPoint)) { Data.Packet packetToSendForNotGuessed = new Data.Packet(playerData.Value.SessionID, 0, OD_Enum.NULL, OP_Enum.SUMMARY); string stringToSendForNotGuessed = packetToSendForNotGuessed.Serialize(); byte[] bytesToSendForNotGuessed = Encoding.UTF8.GetBytes(stringToSendForNotGuessed); _listener.Send(bytesToSendForNotGuessed, bytesToSendForNotGuessed.Length, playerData.Key); } } Console.ReadLine(); gameRunning = false; _listener.Close(); } else { Data.Packet packetToSend = new Data.Packet(packet.ID, 0, OD_Enum.NOT_GUESSED, OP_Enum.GUESS); string stringToSend = packetToSend.Serialize(); byte[] bytesToSend = Encoding.UTF8.GetBytes(stringToSend); _listener.Send(bytesToSend, bytesToSend.Length, endPoint); } }
private static void ProcessData(object p, object ep) { Data.Packet packet = (Data.Packet)p; IPEndPoint endPoint = (IPEndPoint)ep; Console.WriteLine("ID: {0}, data: {1}, answer: {2}, operation: {3}", packet.ID, packet.Data, packet.OD, packet.OP); if (packet.OP == OP_Enum.REGISTER && packet.OD == OD_Enum.REQUEST) { Packet ackPacket = new Packet(packet.ID, OD_Enum.NULL, OP_Enum.ACK); string ackString = ackPacket.Serialize(); byte[] bytesAck = Encoding.UTF8.GetBytes(ackString); _listener.Send(bytesAck, bytesAck.Length, endPoint); Console.Write("Operation: {0}, answer: {1}, id: {2}, data: {3}", packet.OP, packet.OD, packet.ID, packet.Data); Register(packet, endPoint); } if (packet.OP == OP_Enum.GUESS) { Packet ackPacket = new Packet(packet.ID, OD_Enum.NULL, OP_Enum.ACK); string ackString = ackPacket.Serialize(); byte[] bytesAck = Encoding.UTF8.GetBytes(ackString); _listener.Send(bytesAck, bytesAck.Length, endPoint); Guessing(packet, endPoint); } }
private static void SendStartMessage() { foreach (var playerData in _players) { Data.Packet packet = new Data.Packet(playerData.Value.SessionID, 0, OD_Enum.ACKX, OP_Enum.START); string stringToSend = packet.Serialize(); byte[] bytesToSend = Encoding.UTF8.GetBytes(stringToSend); _listener.Send(bytesToSend, bytesToSend.Length, playerData.Value.PlayerEndPoint); } }
private static void RegisterUsers() { while (_players.Count < playerLimit) { IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); byte[] recvMsg = _listener.Receive(ref sender); Data.Packet packet = Data.Packet.Deserialize(Encoding.UTF8.GetString(recvMsg)); Console.WriteLine("ID: {0}, data: {1}, answer: {2}, operation: {3}", packet.ID, packet.Data, packet.OD, packet.OP); ProcessData(packet, sender); } }
private static void Register(Data.Packet packet, IPEndPoint endPoint) { if (!_players.ContainsKey(endPoint)) { var id = HelperData.RandomInt(0, 255); _players.Add(endPoint, new PlayerData(endPoint, id)); Data.Packet packetToSend = new Data.Packet(id, 0, OD_Enum.ACKX, OP_Enum.REGISTER); string stringToSend = packetToSend.Serialize(); byte[] bytesToSend = Encoding.UTF8.GetBytes(stringToSend); _listener.Send(bytesToSend, bytesToSend.Length, endPoint); } }
private static void SendTime(object t) { int timeToSend = (int)t; foreach (var playerData in _players) { Console.WriteLine("Wysyłam czas do: {0}", playerData.Key.ToString()); Data.Packet packet = new Data.Packet(playerData.Value.SessionID, timeToSend, OD_Enum.NULL, OP_Enum.TIME); string stringToSend = packet.Serialize(); byte[] bytesToSend = Encoding.UTF8.GetBytes(stringToSend); _listener.Send(bytesToSend, bytesToSend.Length, playerData.Key); } }
public static void DataIN(object ep) { while (gameRunning) { IPEndPoint sender = (IPEndPoint)ep; try { byte[] recByte = _listener.Receive(ref sender); string recString = Encoding.UTF8.GetString(recByte); Data.Packet packet = Data.Packet.Deserialize(recString); Console.WriteLine("ID: {0}, data: {1}, answer: {2}, operation: {3}", packet.ID, packet.Data, packet.OD, packet.OP); ProcessData(packet, sender); } catch (Exception e) { Console.WriteLine(e.Message); } } }
private static void DataManager(object p) { Data.Packet packet = (Data.Packet)p; if (packet.OP == OP_Enum.START) { Console.WriteLine("Gra wystartowała!"); InputNumber(packet); } if (packet.OP == OP_Enum.GUESS && packet.OD == OD_Enum.GUESSED) { Console.WriteLine("Wygrałeś!"); Console.WriteLine("ID: {0}, data: {1}, answer: {2}, operation: {3}", packet.ID, packet.Data, packet.OD, packet.OP); gameRunning = false; _udpClient.Close(); Console.ReadLine(); } if (packet.OP == OP_Enum.GUESS && packet.OD == OD_Enum.NOT_GUESSED) { Console.WriteLine("Nie zgadłeś!"); InputNumber(packet); } if (packet.OP == OP_Enum.SUMMARY) { Console.WriteLine("Gra zakończona nie wygrałeś."); gameRunning = false; _udpClient.Close(); Console.ReadLine(); } if (packet.OP == OP_Enum.TIME && packet.OD == OD_Enum.NULL) { Console.WriteLine("ID: {0}, data: {1}, answer: {2}, operation: {3}", packet.ID, packet.Data, packet.OD, packet.OP); Console.WriteLine("Czas do końca: {0}", packet.Data); } if (packet.OP == OP_Enum.TIME && packet.OD == OD_Enum.TIME_OUT) { Console.WriteLine("ID: {0}, data: {1}, answer: {2}, operation: {3}", packet.ID, packet.Data, packet.OD, packet.OP); Console.WriteLine("GRA ZAKOŃCZONA, NIKT NIE ZGADNAL."); gameRunning = false; _udpClient.Close(); Console.ReadLine(); } }
static void Main(string[] args) { bool registered = false; SetupClient(); do { Console.WriteLine("Wpisz register, aby się zarejestrować:"); var msg = Console.ReadLine(); if (msg.ToLower().Equals("register")) { Data.Packet packet = new Data.Packet(OD_Enum.REQUEST, OP_Enum.REGISTER); string stringToSend = packet.Serialize(); byte[] msgToSend = Encoding.UTF8.GetBytes(stringToSend); _udpClient.Send(msgToSend, msgToSend.Length); byte[] recACK = _udpClient.Receive(ref Program.remoteEndPoint); string ackString = Encoding.UTF8.GetString(recACK); Packet ackPacket = Packet.Deserialize(ackString); byte[] recvMessage = _udpClient.Receive(ref Program.remoteEndPoint); string recvMessageString = Encoding.UTF8.GetString(recvMessage); Data.Packet recPacket = Data.Packet.Deserialize(recvMessageString); Packet sendACK = new Packet(recPacket.ID, OD_Enum.NULL, OP_Enum.ACK); string ackSend = sendACK.Serialize(); byte[] ackSendByte = Encoding.UTF8.GetBytes(ackSend); _udpClient.Send(ackSendByte, ackSendByte.Length); Console.WriteLine("Zarejestrowano, ID: {0}, data: {1}, answer: {2}, operation: {3}", recPacket.ID, recPacket.Data, recPacket.OD, recPacket.OP); registered = true; } else { Console.WriteLine("Niepoprawna komenda"); registered = false; } } while (!registered); Thread thread = new Thread(DataIN); thread.Start(); }
private static void DataIN() { while (gameRunning) { try { byte[] recBuff = _udpClient.Receive(ref remoteEndPoint); string recString = Encoding.UTF8.GetString(recBuff); if (recBuff.Length > 0) { Data.Packet recvPacket = Data.Packet.Deserialize(recString); Packet packet = new Packet(recvPacket.ID, OD_Enum.NULL, OP_Enum.ACK); string serializedString = packet.Serialize(); byte[] bytesAck = Encoding.ASCII.GetBytes(serializedString); _udpClient.Send(bytesAck, bytesAck.Length); Thread dataManagerThread = new Thread(DataManager); dataManagerThread.Start(recvPacket); Console.WriteLine("ID: {0} OD: {1} OP: {2} DATA: {3}", recvPacket.ID, recvPacket.OD, recvPacket.OP, recvPacket.Data); } } catch (Exception e) { Console.WriteLine("Server disconnected"); } } }
private static void SubstractTime(object state) { if (time > 0) { Console.WriteLine(time);; if (tempTime < 10) { tempTime++; Console.WriteLine(tempTime); } if (tempTime == 10) { Thread thread = new Thread(SendTime); thread.Start(time); tempTime = 0; } time--; } else if (time == 0) { gameRunning = false; foreach (var playerData in _players) { try { Data.Packet packetToSend = new Data.Packet(playerData.Value.SessionID, 0, OD_Enum.TIME_OUT, OP_Enum.TIME); string stringToSend = packetToSend.Serialize(); byte[] bytesToSend = Encoding.UTF8.GetBytes(stringToSend); _listener.Send(bytesToSend, bytesToSend.Length, playerData.Value.PlayerEndPoint); } catch (Exception e) { Console.WriteLine("Client disconected: {0}", playerData.Value.SessionID); } } _listener.Close(); timer.Change(Timeout.Infinite, Timeout.Infinite); } }
public ThreadObject(IPEndPoint ep, Data.Packet p) { EndPoint = ep; Packet = p; }