private void receivingThreadBody() { while (binaryReader != null && client != null && isAlive) { String serializedPacket = ""; while (!serializedPacket.EndsWith(Global.END_OF_PACKET) && isAlive) { if (stream.DataAvailable) { serializedPacket += binaryReader.ReadChar(); } else { Thread.Sleep(200); } } if (isAlive) { System.Diagnostics.Debug.WriteLine("packet received => deserialization"); serializedPacket = serializedPacket.Replace(Global.END_OF_PACKET, ""); System.Diagnostics.Debug.WriteLine(serializedPacket); receivedQueue.Enqueue(GamePacketSerialization.deserialize(serializedPacket)); System.Diagnostics.Debug.WriteLine("queue size: " + receivedQueue.Count); } } }
private void sendingThreadBody() { while (binaryWriter != null && client != null && isAlive) { if (toSendQueue.Count > 0) { GamePacket packet = (GamePacket)toSendQueue.Dequeue(); String serializedPacket = GamePacketSerialization.serialize(packet) + Global.END_OF_PACKET; for (int i = 0; i < serializedPacket.Length; i++) { binaryWriter.Write(serializedPacket[i]); } } Thread.Sleep(200); } }
private void ReceivingThreadStart() { System.Diagnostics.Debug.WriteLine("ReceivingThread started"); GamePacket packet; gameIsEnded = false; while (!gameIsEnded) { Thread.Sleep(250); packet = wifiService.receive(); if (packet != null) { System.Diagnostics.Debug.WriteLine(packet.GetType() + " packt received:" + System.Environment.NewLine + GamePacketSerialization.serialize(packet)); if (packet.Type == GamePacket.TYPE.WHO_STARTS) { meStartFirst = packet.getWhoStarts() == Global.CLIENT_FIRST; BeginInvoke(new MethodInvoker(delegate() { mainBoard.setShootable(meStartFirst); })); } else if (packet.Type == GamePacket.TYPE.USER_NAME) { } else if (packet.Type == GamePacket.TYPE.SHOT) { BeginInvoke(new MethodInvoker(delegate() { ShotResult result = prevBoard.Shoot(packet.getCoordinates()); if (prevBoard.isGameEnded()) { wifiService.send(new GamePacket(new GameResult(Global.GAME_RESULT_WINNER))); // opponent is winner because he sunk all of my ships EndGame(false); } else { wifiService.send(new GamePacket(result)); if (!result.isHit() || result.isSunk()) { BeginInvoke(new MethodInvoker(delegate() { mainBoard.setShootable(true); })); } } })); } else if (packet.Type == GamePacket.TYPE.RESULT) { bool result = packet.getShotResult().isHit(); BeginInvoke(new MethodInvoker(delegate() { mainBoard.ShotResult(packet.getShotResult()); mainBoard.setShootable(result && !packet.getShotResult().isSunk()); })); currentTarget = null; if (packet.getShotResult().isSunk()) { BeginInvoke(new MethodInvoker(delegate() { mainBoard.setShipSunk(packet.getShotResult().getMatrix()); })); } } else if (packet.Type == GamePacket.TYPE.GAME_RESULT) { BeginInvoke(new MethodInvoker(delegate() { EndGame(packet.getGameResult().isWinner()); })); } } } }