// Sends the server our current paddle's Y Position (if it's changed) private void _sendPaddlePosition(TimeSpan resendTimeout) { // Don't send anything if there hasn't been an update if (_previousY == _ourPaddle.Position.Y) { return; } // Make sure not to spam them if (DateTime.Now >= (_lastPacketSentTime.Add(resendTimeout))) { PaddlePositionPacket ppp = new PaddlePositionPacket(); ppp.Y = _ourPaddle.Position.Y; _sendPacket(ppp); } }
// This updates a paddle's postion from a client // `message.Packet.Type` must be `PacketType.PaddlePosition` // TODO add some "cheat detection," private void _handlePaddleUpdate(NetworkMessage message) { // Only two possible players PlayerInfo player = message.Sender.Equals(LeftPlayer.Endpoint) ? LeftPlayer : RightPlayer; // Make sure we use the latest message **SENT BY THE CLIENT** ignore it otherwise if (message.Packet.Timestamp > player.LastPacketReceivedTimestamp) { // record timestamp and time player.LastPacketReceivedTimestamp = message.Packet.Timestamp; player.LastPacketReceivedTime = message.ReceiveTime; // "cast" the packet and set data PaddlePositionPacket ppp = new PaddlePositionPacket(message.Packet.GetBytes()); player.Paddle.Position.Y = ppp.Y; } }