예제 #1
0
        /// <summary>
        /// Helper for updating a locally controlled gamer.
        /// </summary>
        void UpdateLocalGamer(LocalNetworkGamer gamer, GameTime gameTime,
                              bool sendPacketThisFrame)
        {
            // Look up what tank is associated with this local player.
            Tank tank = gamer.Tag as Tank;

            // Read the inputs controlling this tank.
            PlayerIndex playerIndex = gamer.SignedInGamer.PlayerIndex;

            Vector2 tankInput;
            Vector2 turretInput;

            ReadTankInputs(playerIndex, out tankInput, out turretInput);

            // Update the tank.
            tank.UpdateLocal(tankInput, turretInput);

            // Periodically send our state to everyone in the session.
            if (sendPacketThisFrame)
            {
                tank.WriteNetworkPacket(packetWriter, gameTime);

                gamer.SendData(packetWriter, SendDataOptions.InOrder);
            }
        }
        protected void UpdateLocalPlayer(GameTime gameTime)
        {
            //you know this will def be the local gamer as there is only 1 allowed
            LocalNetworkGamer localGamer = networkSession.LocalGamers[0];

            //gotta get the sprite to modify it
            UserControlledSprite localSprite = (UserControlledSprite)localGamer.Tag;

            //now actually update sprite regualrly
            //moving is true because this is just you controlling it
            localSprite.Update(gameTime, Window.ClientBounds, true);

            if (!localSprite.isChasing)
            {
                localSprite.score += gameTime.ElapsedGameTime.Milliseconds;
            }

            writer.Write((int)MessageType.UpdatePlayerPos);
            writer.Write(localSprite.Position);
            if (!localSprite.isChasing)
            {
                writer.Write(localSprite.score);
            }
            //simple sprites may not send data, you must use the localnetworkgamer object
            //the options is InOrder because its ok if the packets dont get there, but they at least must be in order
            localGamer.SendData(writer, SendDataOptions.ReliableInOrder);

            //if your local sprite is a chaser
            if (localSprite.isChasing)
            {
                //if you're able to drop a bomb
                if (bombCoolDown <= 0)
                {
                    //and if you press space
                    if (Keyboard.GetState().IsKeyDown(Keys.Space))
                    {
                        AddBomb(localSprite.Position);

                        writer.Write((int)MessageType.AddBomb);
                        writer.Write(localSprite.Position);
                        localGamer.SendData(writer, SendDataOptions.ReliableInOrder);
                    }
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Send all server data
        /// </summary>
        public void SendServerData()
        {
            if (networkHelper.serverPacketWriter.Length > 0)
            {
                // Send the combined data to everyone in the session
                LocalNetworkGamer server = (LocalNetworkGamer)networkHelper.session.Host;

                server.SendData(networkHelper.serverPacketWriter, SendDataOptions.InOrder);
            }
        }
예제 #4
0
        /// <summary>
        /// Send the local gamer's local player count to network.
        /// </summary>
        public static void SendToNetwork(this LocalNetworkGamer localGamer)
        {
            PacketWriter writer = new PacketWriter();

            writer.Write(PacketHeader.LOBBY_DATA);
            writer.Write(localGamer.GetLocalPlayerCount());

            // send in order, since old data must not overwrite the new data.
            localGamer.SendData(writer, SendDataOptions.InOrder);
        }
        private static void SendPackets(LocalNetworkGamer gamer)
        {
#if WINDOWS
            if (ShouldSendLevel)
            {
                BinaryWriter b = new BinaryWriter(packetWriter.BaseStream);
                GameManager.GetLevel().Write(b, true);

                Console.WriteLine("Packetwriter Line:" + packetWriter.Position);
                gamer.SendData(packetWriter, SendDataOptions.ReliableInOrder);
                ShouldSendLevel = false;
            }
#endif
#if XBOX
            if (RequestTime > TimeSpan.FromSeconds(2))
            {
                RequestTime -= TimeSpan.FromSeconds(2);
                packetWriter.Write(true);
                gamer.SendData(packetWriter, SendDataOptions.ReliableInOrder);
            }
#endif
        }
예제 #6
0
        protected override void SendToNetwork(GameTime gameTime)
        {
            // write input to all players :
            // Packets are sent inorder to make sure the world state never goes backwards in time
            // Packets can still get lost, however.
            PacketWriter writer = new PacketWriter();

            writer.Write(PacketHeader.INGAME_DATA);
            foreach (CarActor carActor in idTocarActorMap_[localGamer_.Id])
            {
                carActor.sendToNetwork(writer);
            }
            localGamer_.SendData(writer, SendDataOptions.InOrder);
        }
예제 #7
0
        protected virtual void UpdateLocalGamer(LocalNetworkGamer gamer, GameTime gameTime, bool sendPacketThisFrame)
        {
            Player p = gamer.Tag as Player;

            if (p != null)
            {
                //p.UpdateLocalPlayer(gameTime);

                // Periodically send our state to everyone in the session.
                if (sendPacketThisFrame)
                {
                    p.WriteNetworkPacket(packetWriter, gameTime);
                    gamer.SendData(packetWriter, SendDataOptions.InOrder);
                }
            }
        }
        protected void Update_Start(GameTime gameTime)
        {
            //local gamers is a list of gamers
            LocalNetworkGamer localGamer = networkSession.LocalGamers[0];

            if (networkSession.AllGamers.Count == 2)
            {
                if (Keyboard.GetState().IsKeyDown(Keys.Space))
                {
                    writer.Write((int)MessageType.StartGame);
                    localGamer.SendData(writer, SendDataOptions.Reliable);

                    StartGame();
                }
            }
            ProcessIncomingData(gameTime);
        }
예제 #9
0
        public void UpdateServer()
        {
            Int32 GameMode = -1;
            Int32 Map      = -1;

            packetWriter.Write(game.GameOver);
            packetWriter.Write((Int32)(game.Winner != null ? game.Winner.ID : 0));

            if (game.menus.IsInGame)
            {
                packetWriter.Write((Int32)game.gamemode);
                packetWriter.Write((Int32)game.map);
            }
            else
            {
                packetWriter.Write((Int32)(-1));
                packetWriter.Write((Int32)(-1));
            }

            packetWriter.Write(GameMode);
            packetWriter.Write(Map);

            foreach (BasicOrb orb in game.Orbs)
            {
                packetWriter.Write((bool)orb.relevent);
            }

            foreach (BasicOrb orb in game.Orbs)
            {
                if (orb.relevent)
                {
                    orb.Write(packetWriter);
                }
            }

            if (game.gamemode == Game1.GameMode.KeepAway)
            {
                packetWriter.Write(game.flag.IsCarried);
                packetWriter.Write(game.flag.Position);
                packetWriter.Write(game.flag.carrier.ID);
            }

            LocalNetworkGamer server = (LocalNetworkGamer)networkSession.Host;

            server.SendData(packetWriter, SendDataOptions.InOrder);
        }
예제 #10
0
        /// <summary>
        /// Helper for updating a locally controlled gamer.
        /// </summary>
        void UpdateLocalGamer(LocalNetworkGamer gamer)
        {
            // Look up what tank is associated with this local player.
            Tank localTank = gamer.Tag as Tank;

            // Update the tank.
            ReadTankInputs(localTank, gamer.SignedInGamer.PlayerIndex);

            localTank.Update();

            // Write the tank state into a network packet.
            packetWriter.Write(localTank.Position);
            packetWriter.Write(localTank.TankRotation);
            packetWriter.Write(localTank.TurretRotation);

            // Send the data to everyone in the session.
            gamer.SendData(packetWriter, SendDataOptions.InOrder);
        }
예제 #11
0
        /// <summary>
        /// Helper for updating a locally controlled gamer.
        /// </summary>
        void UpdateLocalGamer(LocalNetworkGamer gamer)
        {
            // Look up what tank is associated with this local player,
            // and read the latest user inputs for it. The server will
            // later use these values to control the tank movement.
            NetworkPlayer localPlayer = gamer.Tag as NetworkPlayer;

            localPlayer.Update();
            // Only send if we are not the server. There is no point sending packets
            // to ourselves, because we already know what they will contain!
            if (!networkSession.IsHost)
            {
                // Write our latest input state into a network packet.
                packetWriter.Write(localPlayer.Position);

                // Send our input data to the server.
                gamer.SendData(packetWriter,
                               SendDataOptions.InOrder, networkSession.Host);
            }
        }
예제 #12
0
        public void UpdateHost(GameTime gameTime, World WorldRef, NetworkSession networkSession)
        {
            for (int i = 0; i < ButtonCount; i++)
            {
                if (Buttons[i].ButtonSpellRef != null)
                {
                    if (Buttons[i].ButtonPress())
                    {
                        if (WorldRef.ApplySpell(NetPlayerInterfaceRef.PlayerRef, Buttons[i].ButtonSpellRef,
                                                NetPlayerInterfaceRef.PlayerRef.Character.Target, false, false))
                        {
                            LocalNetworkGamer server = (LocalNetworkGamer)networkSession.Host;

                            foreach (NetworkGamer negamer in networkSession.RemoteGamers)
                            {
                                PacketWriter  packetWriter = new PacketWriter();
                                NetworkPlayer everyPlayer  = negamer.Tag as NetworkPlayer;
                                packetWriter.Write('S');
                                packetWriter.Write(NetPlayerInterfaceRef.PlayerRef.ID);
                                packetWriter.Write(Buttons[i].ButtonSpellRef.SpellDataId);

                                if (NetPlayerInterfaceRef.PlayerRef.Character.Target == null)
                                {
                                    packetWriter.Write(0);
                                }
                                else
                                {
                                    packetWriter.Write(NetPlayerInterfaceRef.PlayerRef.Character.Target.ID);
                                }

                                server.SendData(packetWriter, SendDataOptions.InOrder);
                                packetWriter.Flush();
                            }
                        }
                    }
                }
            }
        }
예제 #13
0
        /// <summary>
        /// This method only runs on the server. It calls Update on all the
        /// tank instances, both local and remote, using inputs that have
        /// been received over the network. It then sends the resulting
        /// tank position data to everyone in the session.
        /// </summary>
        void UpdateServer()
        {
            // Loop over all the players in the session, not just the local ones!
            foreach (NetworkGamer gamer in networkSession.AllGamers)
            {
                // Look up what tank is associated with this player.
                Tank tank = gamer.Tag as Tank;

                // Update the tank.
                tank.Update();

                // Write the tank state into the output network packet.
                packetWriter.Write(gamer.Id);
                packetWriter.Write(tank.Position);
                packetWriter.Write(tank.TankRotation);
                packetWriter.Write(tank.TurretRotation);
            }

            // Send the combined data for all tanks to everyone in the session.
            LocalNetworkGamer server = (LocalNetworkGamer)networkSession.Host;

            server.SendData(packetWriter, SendDataOptions.InOrder);
        }
예제 #14
0
        /// <summary>
        /// This method only runs on the server. It calls Update on all the
        /// tank instances, both local and remote, using inputs that have
        /// been received over the network. It then sends the resulting
        /// tank position data to everyone in the session.
        /// </summary>
        void UpdateServer(GameTime gameTime)
        {
            // First off, our packet will indicate how many tanks it has data for.
            packetWriter.Write(networkSession.AllGamers.Count);

            // Loop over all the players in the session, not just the local ones!
            foreach (NetworkGamer gamer in networkSession.AllGamers)
            {
                // Look up what tank is associated with this player.
                NetworkPlayer player = gamer.Tag as NetworkPlayer;

                // Update the tank.
                player.Update();

                // Write the tank state into the output network packet.
                packetWriter.Write(player.Position);
            }

            // Send the combined data for all tanks to everyone in the session.
            LocalNetworkGamer server = (LocalNetworkGamer)networkSession.Host;

            server.SendData(packetWriter, SendDataOptions.InOrder);
        }
예제 #15
0
        public override void Update(GameTime gameTime)
        {
            if (!GameMain.CurrentSession.IsHost &&
                Id != GameMain.CurrentSession.LocalGamers[0].Id)
            {
                // Not my object!
                return;
            }

            if (GameMain.CurrentSession.IsHost && _isUnique &&
                Id != GameMain.CurrentSession.LocalGamers[0].Id)
            {
                // Not my object!
                return;
            }

            _timeElapsed += gameTime.ElapsedGameTime.Milliseconds;

            if (_timeElapsed >= _timeBetween)
            {
                /* Protocol will always be:
                 *  Type (string)
                 *  Id (int)
                 *  Data (varies)
                 */
                PacketWriter writer = new PacketWriter();
                writer.Write(Type);
                writer.Write(Id);

                SendData(writer);

                _player.SendData(writer, SendDataOptions.ReliableInOrder);

                _timeElapsed -= _timeBetween;
            }
        }
예제 #16
0
        public void UpdateLocalGamer(LocalNetworkGamer gamer)
        {
            PlayerIndex index = gamer.SignedInGamer.PlayerIndex;

            BasicOrb orb = gamer.Tag as BasicOrb;

            packetWriter.Write(new Vector2(orb.Position.X, orb.Position.Z));
            packetWriter.Write(orb.Rotation.Y);
            packetWriter.Write(orb.PrimaryWeaponQue);
            packetWriter.Write(orb.SecondaryWeaponQue);
            packetWriter.Write(orb.AbilityQue);
            packetWriter.Write(orb.GunCurrent);
            packetWriter.Write(orb.Abilty[0]);
            packetWriter.Write(orb.Team);
            packetWriter.Write(orb.Alpha);
            packetWriter.Write(orb.IsPhasing);
            packetWriter.Write(orb.PhaseTimer);
            packetWriter.Write(orb.PhaseVelocity);
            packetWriter.Write(orb.MyController.MoveStickTrack);

            gamer.SendData(packetWriter, SendDataOptions.InOrder, networkSession.Host);

            return;
        }
예제 #17
0
        public void Send(LocalNetworkGamer local, qHeader pHeader)
        {
            PacketWriter pWrite = new PacketWriter();

            pWrite.Write((int)pHeader.type);
            pWrite.Write((int)pHeader.packetOwner);
            pWrite.Write(pHeader.inseq);
            pWrite.Write(pHeader.outseq);


            switch (pHeader.type)
            {
            case QueueType.ship_rot_clock:
                Ship_rot_message p1 = (Ship_rot_message)pHeader.obj;
                pWrite.Write((int)p1.rot);
                pWrite.Write((int)p1.x);
                pWrite.Write((int)p1.y);
                pWrite.Write((int)p1.serverRotvalue);
                break;

            case QueueType.ship_rot_anti:
                Ship_rot_message p4 = (Ship_rot_message)pHeader.obj;
                pWrite.Write((int)p4.rot);
                pWrite.Write((int)p4.x);
                pWrite.Write((int)p4.y);
                pWrite.Write((int)p4.serverRotvalue);
                break;

            case QueueType.ship_missile:
                Ship_Create_Missile_Message missile = (Ship_Create_Missile_Message)pHeader.obj;
                pWrite.Write((int)missile.x);
                pWrite.Write((int)missile.y);
                pWrite.Write((int)missile.rot);
                break;

            case QueueType.ship_impulse:
                ship_impulse p = (ship_impulse)pHeader.obj;
                pWrite.Write((int)p.impulse.X);
                pWrite.Write((int)p.impulse.Y);
                pWrite.Write((int)p.x);
                pWrite.Write((int)p.y);
                pWrite.Write((int)p.rot);
                break;

            case QueueType.ship_bomb:
                Ship_Create_Bomb_Message bomb = (Ship_Create_Bomb_Message)pHeader.obj;
                pWrite.Write((int)bomb.x);
                pWrite.Write((int)bomb.y);
                pWrite.Write((int)bomb.rot);
                break;

            case QueueType.EventMessage:
                EvenMessage e = new EvenMessage((EvenMessage)pHeader.obj);
                pWrite.Write(e.gameIdA);
                pWrite.Write(e.gameIdB);
                pWrite.Write(e.CollisionPt);
                break;
            }

            local.SendData(pWrite, SendDataOptions.InOrder);
        }
예제 #18
0
        public void Update(Character[] c, ParticleManager pMan)
        {
            LocalNetworkGamer gamer = GetGamer();

            if (gamer == null)
            {
                return;
            }

            frame -= FrameTime;
            if (frame < 0f)
            {
                frame = .05f;



                if (netPlay.Hosting)
                {
                    if (c[0] != null)
                    {
                        writer.Write(MSG_SERVER_DATA);

                        c[0].WriteToNet(writer);

                        for (int i = 2; i < c.Length; i++)
                        {
                            if (c[i] != null)
                            {
                                c[i].WriteToNet(writer);
                            }
                        }

                        pMan.NetWriteParticles(writer);

                        writer.Write(MSG_END);
                        gamer.SendData(writer, SendDataOptions.None);
                    }
                }
                if (netPlay.Joined)
                {
                    if (c[1] != null)
                    {
                        writer.Write(MSG_CLIENT_DATA);

                        c[1].WriteToNet(writer);

                        pMan.NetWriteParticles(writer);

                        writer.Write(MSG_END);
                        gamer.SendData(writer, SendDataOptions.None);
                    }
                }
            }
            if (gamer.IsDataAvailable)
            {
                NetworkGamer sender;
                gamer.ReceiveData(reader, out sender);

                if (!sender.IsLocal)
                {
                    byte type = reader.ReadByte();

                    if (netPlay.Joined)
                    {
                        for (int i = 0; i < c.Length; i++)
                        {
                            if (i != 1)
                            {
                                if (c[i] != null)
                                {
                                    c[i].ReceivedNetUpdate = false;
                                }
                            }
                        }
                    }

                    bool end = false;
                    while (!end)
                    {
                        byte msg = reader.ReadByte();
                        switch (msg)
                        {
                        case MSG_END:
                            end = true;
                            break;

                        case MSG_CHARACTER:

                            int defID = NetPacker.SbyteToInt(reader.ReadSByte());
                            int team  = NetPacker.SbyteToInt(reader.ReadSByte());
                            int ID    = NetPacker.SbyteToInt(reader.ReadSByte());

                            if (c[ID] == null)
                            {
                                c[ID] = new Character(new Vector2(),
                                                      Game1.charDef[defID],
                                                      ID, team);
                            }

                            c[ID].ReadFromNet(reader);

                            c[ID].ReceivedNetUpdate = true;
                            break;

                        case MSG_PARTICLE:
                            byte pType = reader.ReadByte();
                            bool bg    = reader.ReadBoolean();

                            switch (pType)
                            {
                            case Particle.PARTICLE_NONE:
                                //
                                break;

                            case Particle.PARTICLE_BLOOD:
                                pMan.AddParticle(new Blood(reader), bg, true);
                                break;

                            case Particle.PARTICLE_BLOOD_DUST:
                                pMan.AddParticle(new BloodDust(reader), bg, true);
                                break;

                            case Particle.PARTICLE_BULLET:
                                pMan.AddParticle(new Bullet(reader), bg, true);
                                break;

                            case Particle.PARTICLE_FIRE:
                                pMan.AddParticle(new Fire(reader), bg, true);
                                break;

                            case Particle.PARTICLE_FOG:
                                pMan.AddParticle(new Fog(reader), bg, true);
                                break;

                            case Particle.PARTICLE_HEAT:
                                pMan.AddParticle(new Heat(reader), bg, true);
                                break;

                            case Particle.PARTICLE_HIT:
                                pMan.AddParticle(new Hit(reader), bg, true);
                                break;

                            case Particle.PARTICLE_MUZZLEFLASH:
                                pMan.AddParticle(new MuzzleFlash(reader), bg, true);
                                break;

                            case Particle.PARTICLE_ROCKET:
                                pMan.AddParticle(new Rocket(reader), bg, true);
                                break;

                            case Particle.PARTICLE_SHOCKWAVE:
                                pMan.AddParticle(new Shockwave(reader), bg, true);
                                break;

                            case Particle.PARTICLE_SMOKE:
                                pMan.AddParticle(new Smoke(reader), bg, true);
                                break;

                            default:
                                //Error!
                                break;
                            }
                            break;
                        }
                    }

                    if (netPlay.Joined)
                    {
                        for (int i = 0; i < c.Length; i++)
                        {
                            if (i != 1)
                            {
                                if (c[i] != null)
                                {
                                    if (c[i].ReceivedNetUpdate == false)
                                    {
                                        c[i] = null;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }

            if (this.IsActive)
            {
                switch (currentGameState)
                {
                case GameState.SignIn:
                {
                    if (Gamer.SignedInGamers.Count < 1)
                    {
                        Guide.ShowSignIn(1, false);
                        log.Add("Opened User SignIn Interface");
                    }
                    else
                    {
                        currentGameState = GameState.SearchSession;
                        log.Add(Gamer.SignedInGamers[0].Gamertag + " logged in - proceed to SearchSession");
                    }
                }
                break;

                case GameState.SearchSession:
                {
                    AvailableNetworkSessionCollection activeSessions = NetworkSession.Find(NetworkSessionType.SystemLink, 4, null);
                    if (activeSessions.Count == 0)
                    {
                        currentGameState = GameState.CreateSession;
                        log.Add("No active sessions found - proceed to CreateSession");
                    }
                    else
                    {
                        AvailableNetworkSession sessionToJoin = activeSessions[0];
                        networkSession = NetworkSession.Join(sessionToJoin);

                        string myString = "Joined session hosted by " + sessionToJoin.HostGamertag;
                        myString += " with " + sessionToJoin.CurrentGamerCount.ToString() + " players";
                        myString += " and " + sessionToJoin.OpenPublicGamerSlots.ToString() + " open player slots.";
                        log.Add(myString);

                        HookSessionEvents();
                        currentGameState = GameState.InSession;
                    }
                }
                break;

                case GameState.CreateSession:
                {
                    networkSession = NetworkSession.Create(NetworkSessionType.SystemLink, 4, 16);
                    networkSession.AllowHostMigration  = true;
                    networkSession.AllowJoinInProgress = false;
                    log.Add("New session created");

                    HookSessionEvents();
                    currentGameState = GameState.InSession;
                }
                break;

                case GameState.InSession:
                {
                    //send data to all other players in session
                    writer.Write(gameTime.TotalGameTime.Minutes);
                    writer.Write(gameTime.TotalGameTime.Seconds);

                    LocalNetworkGamer localGamer = networkSession.LocalGamers[0];
                    localGamer.SendData(writer, SendDataOptions.ReliableInOrder);

                    //receive data from all other players in session
                    while (localGamer.IsDataAvailable)
                    {
                        NetworkGamer sender;
                        localGamer.ReceiveData(reader, out sender);

                        string gamerTime = "";
                        gamerTime += sender.Gamertag + ": ";
                        gamerTime += reader.ReadInt32() + "m ";
                        gamerTime += reader.ReadInt32() + "s";
                        gamerTimes[sender.Gamertag] = gamerTime;
                    }

                    networkSession.Update();
                }
                break;
                }
            }

            base.Update(gameTime);
        }
예제 #20
0
        // PacketWriter packetWriter2 = new PacketWriter();

        public static void PushToNetwork()
        {
            PacketWriter packetWriter2 = new PacketWriter();

            int count = outQ.Count;

            for (int i = 0; i < count; i++)
            {
                // Read the header
                QueueHdr qH = outQ.Dequeue();

                switch (qH.type)
                {
                case Queue_type.QUEUE_SHIP_BOMB:

                    packetWriter2.Write(qH.inSeqNum);
                    packetWriter2.Write(qH.outSeqNum);
                    packetWriter2.Write((int)qH.type);
                    if (Game1.networkSession != null)
                    {
                        if (Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);
                        }

                        if (Game1.networkSession.IsHost)
                        {
                            LocalNetworkGamer server = (LocalNetworkGamer)Game1.networkSession.Host;

                            server.SendData(packetWriter2, SendDataOptions.InOrder);
                        }
                    }
                    foreach (LocalNetworkGamer gamer in Game1.networkSession.LocalGamers)
                    {
                        if (!Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);
                            // Write our latest input state into a network packet.
                            //packetWriter2.Write(qH.inSeqNum);
                            //packetWriter2.Write(qH.outSeqNum);
                            //packetWriter2.Write((int)qH.type);
                            // packetWriter2.Write((int)qH.data);

                            // Send our input data to the server.//
                            gamer.SendData(packetWriter2,
                                           SendDataOptions.InOrder, Game1.networkSession.Host);
                        }
                    }

                    break;

                case Queue_type.QUEUE_SHIP_MISSILE:

                    packetWriter2.Write(qH.inSeqNum);
                    packetWriter2.Write(qH.outSeqNum);
                    packetWriter2.Write((int)qH.type);

                    if (Game1.networkSession != null)
                    {
                        if (Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);
                        }

                        if (Game1.networkSession.IsHost)
                        {
                            LocalNetworkGamer server = (LocalNetworkGamer)Game1.networkSession.Host;

                            server.SendData(packetWriter2, SendDataOptions.InOrder);
                        }
                    }
                    foreach (LocalNetworkGamer gamer in Game1.networkSession.LocalGamers)
                    {
                        if (!Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);
                            // Write our latest input state into a network packet.
                            //packetWriter2.Write(qH.inSeqNum);
                            //packetWriter2.Write(qH.outSeqNum);
                            //packetWriter2.Write((int)qH.type);
                            // packetWriter2.Write((int)qH.data);

                            // Send our input data to the server.
                            gamer.SendData(packetWriter2,
                                           SendDataOptions.InOrder, Game1.networkSession.Host);
                        }
                    }

                    break;

                case Queue_type.QUEUE_SHIP_IMPULSE:

                    packetWriter2.Write(qH.inSeqNum);
                    packetWriter2.Write(qH.outSeqNum);
                    packetWriter2.Write((int)qH.type);

                    Ship_Impulse_Message sim = (Ship_Impulse_Message)qH.data;

                    packetWriter2.Write((Vector2)sim.impulse);
                    Debug.WriteLine("Outputq - sim.impulse = " + sim.impulse);
                    Debug.WriteLine("Outputq - sim.X = " + sim.impulse.X);
                    Debug.WriteLine("Outputq - sim.Y = " + sim.impulse.Y);

                    if (Game1.networkSession != null)
                    {
                        if (Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);
                        }

                        if (Game1.networkSession.IsHost)
                        {
                            LocalNetworkGamer server = (LocalNetworkGamer)Game1.networkSession.Host;

                            server.SendData(packetWriter2, SendDataOptions.InOrder);
                        }
                    }
                    foreach (LocalNetworkGamer gamer in Game1.networkSession.LocalGamers)
                    {
                        if (!Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);    ///just added 207pm
                            // Write our latest input state into a network packet.
                            //packetWriter2.Write(qH.inSeqNum);
                            //packetWriter2.Write(qH.outSeqNum);
                            //packetWriter2.Write((int)qH.type);
                            //Ship_Impulse_Message sim = (Ship_Impulse_Message)qH.data;

                            //packetWriter2.Write((Vector2)sim.impulse);



                            // Send our input data to the server.
                            gamer.SendData(packetWriter2,
                                           SendDataOptions.InOrder, Game1.networkSession.Host);
                        }
                    }
                    break;

                case Queue_type.QUEUE_SHIP_ROT:
                    //send to input queue

                    //packetWriter2.Write(qH.inSeqNum);
                    //        packetWriter2.Write(qH.outSeqNum);
                    //        packetWriter2.Write((int)qH.type);

                    //        Ship_Impulse_Message sim = (Ship_Impulse_Message)qH.data;

                    //        packetWriter2.Write((Vector2)sim.impulse);

                    packetWriter2.Write(qH.inSeqNum);
                    packetWriter2.Write(qH.outSeqNum);
                    packetWriter2.Write((int)qH.type);
                    Ship_Rot_Message rotMessage = (Ship_Rot_Message)qH.data;
                    packetWriter2.Write(rotMessage.rotation);
                    Debug.WriteLine(" OutputQ - rotMessage.rotation = " + rotMessage.rotation);


                    if (Game1.networkSession != null)
                    {
                        if (Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);
                        }
                    }

                    if (Game1.networkSession.IsHost)
                    {
                        LocalNetworkGamer server = (LocalNetworkGamer)Game1.networkSession.Host;

                        server.SendData(packetWriter2, SendDataOptions.InOrder);
                    }

                    foreach (LocalNetworkGamer gamer in Game1.networkSession.LocalGamers)
                    {
                        if (!Game1.networkSession.IsHost)
                        {
                            // Write our latest input state into a network packet.
                            //packetWriter2.Write(qH.inSeqNum);
                            //packetWriter2.Write(qH.outSeqNum);
                            //packetWriter2.Write((int)qH.type);
                            //Ship_Rot_Message rotMessage = (Ship_Rot_Message)qH.data;
                            //packetWriter2.Write(rotMessage.rotation);
                            //  packetWriter2.Write((Vector2)qH.data);

                            // Send our input data to the server.
                            gamer.SendData(packetWriter2,
                                           SendDataOptions.InOrder, Game1.networkSession.Host);
                        }
                    }
                    break;

                case Queue_type.QUEUE_PHYSICS_BUFFER:

                    if (Game1.networkSession != null)
                    {
                        if (Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);
                        }
                    }

                    if (Game1.networkSession != null)
                    {
                        // packetWriter2.Write(gamer.Id);
                        packetWriter2.Write(qH.inSeqNum);
                        packetWriter2.Write(qH.outSeqNum);
                        packetWriter2.Write((int)qH.type);
                        //Debug.WriteLine("qH.inSeqNum from PushToNetwork = " + qH.inSeqNum);
                        //Debug.WriteLine("qH.outSeqNum from PushToNetwork = " + qH.outSeqNum);
                        //Debug.WriteLine("qH.type from PushToNetwork = " + qH.type);
                        //PhysicsBuffer[] localPhysicsBuff = new PhysicsBuffer[];
                        PhysicsBuffer_Message PhysicsBuff_MessageInQueueHdr = new PhysicsBuffer_Message((PhysicsBuffer_Message)qH.data);

                        //get the count from the buffer
                        packetWriter2.Write(PhysicsBuff_MessageInQueueHdr.count);
                        //Debug.WriteLine("PhysicsBuff_MessageInQueueHdr.count = " + PhysicsBuff_MessageInQueueHdr.count);
                        PhysicsBuffer[] localPhysicsBuff = new PhysicsBuffer[PhysicsBuff_MessageInQueueHdr.count];
                        //get the the physics buffer struct of id, position , rotation out
                        localPhysicsBuff = PhysicsBuff_MessageInQueueHdr.pBuff;

                        for (int j = 0; j < PhysicsBuff_MessageInQueueHdr.count; j++)
                        {
                            PhysicsBuffer myPhysicsBuffer = new PhysicsBuffer();

                            myPhysicsBuffer.id       = localPhysicsBuff[j].id;
                            myPhysicsBuffer.position = localPhysicsBuff[j].position;
                            myPhysicsBuffer.rotation = localPhysicsBuff[j].rotation;
                            packetWriter2.Write(myPhysicsBuffer.id);
                            packetWriter2.Write(myPhysicsBuffer.position);
                            packetWriter2.Write(myPhysicsBuffer.rotation);
                            //Debug.WriteLine("myPhysicsBuffer.id = " + myPhysicsBuffer.id);
                            //Debug.WriteLine("myPhysicsBuffer.position = " + myPhysicsBuffer.position);
                            //Debug.WriteLine("myPhysicsBuffer.rotation = " + myPhysicsBuffer.rotation);
                        }



                        if (Game1.networkSession != null)
                        {
                            if (Game1.networkSession.IsHost)
                            {
                                LocalNetworkGamer server = (LocalNetworkGamer)Game1.networkSession.Host;

                                server.SendData(packetWriter2, SendDataOptions.InOrder);
                            }
                        }

                        // if this is the client machine, need to send to server
                    }

                    // Send our input data to the server.
                    //if (Game1.networkSession != null)
                    //{
                    //    if (Game1.networkSession.IsHost)
                    //    {
                    //        foreach (LocalNetworkGamer gamer in Game1.networkSession.LocalGamers)
                    //        {
                    //            gamer.SendData(packetWriter2,
                    //                        SendDataOptions.InOrder, Game1.networkSession.);
                    //        }
                    //    }
                    //}



                    break;

                case Queue_type.QUEUE_EVENT:

                    if (Game1.networkSession != null)
                    {
                        if (Game1.networkSession.IsHost)
                        {
                            InputQueue.add(qH);
                        }
                    }
                    if (Game1.networkSession != null)
                    {
                        // Write our latest input state into a network packet.
                        packetWriter2.Write(qH.inSeqNum);
                        packetWriter2.Write(qH.outSeqNum);
                        packetWriter2.Write((int)qH.type);
                        // packetWriter2.Write((int)qH.data);
                        Event_Message eventMsg = new Event_Message((Event_Message)qH.data);
                        packetWriter2.Write(eventMsg.GameID_A);
                        //   Debug.WriteLine("eventMsg " + eventMsg.GameID_A);
                        packetWriter2.Write(eventMsg.GameID_B);
                        //  Debug.WriteLine("eventMsg " + eventMsg.GameID_B);
                        packetWriter2.Write(eventMsg.collision_pt);
                        //   Debug.WriteLine("eventMsg " + eventMsg.collision_pt);


                        if (Game1.networkSession != null)
                        {
                            if (Game1.networkSession.IsHost)
                            {
                                LocalNetworkGamer server = (LocalNetworkGamer)Game1.networkSession.Host;

                                server.SendData(packetWriter2, SendDataOptions.InOrder);
                            }
                        }

                        // Send our input data to the server.
                        // gamer.SendData(packetWriter2,
                        //              SendDataOptions.InOrder, Game1.networkSession.Host);
                    }


                    //foreach (LocalNetworkGamer gamer in Game1.networkSession.LocalGamers)
                    //{

                    //    if (!Game1.networkSession.IsHost)
                    //    {
                    //        // Write our latest input state into a network packet.
                    //        packetWriter2.Write(qH.inSeqNum);
                    //        packetWriter2.Write(qH.outSeqNum);
                    //        packetWriter2.Write((int)qH.type);
                    //       // Ship_Rot_Message rotMessage = (Ship_Rot_Message)qH.data;
                    //       // packetWriter2.Write(rotMessage.rotation);
                    //      //  packetWriter2.Write((Vector2)qH.data);

                    //        // Send our input data to the server.
                    //        gamer.SendData(packetWriter2,
                    //                       SendDataOptions.InOrder, Game1.networkSession.Host);
                    //    }
                    //}
                    break;

                default:
                    break;
                }
            }
        }