Esempio n. 1
0
        /// <summary>
        /// Return the list of servers that match the version specified
        /// </summary>
        private static void SendServerLists(NetIncomingMessage netMsg, NetPeer peer)
        {
            foreach (var server in ServerDictionary.Values.ToArray())
            {
                var msgData = MasterServerMessageFactory.CreateNewMessageData <MsReplyServersMsgData>();

                msgData.Id                           = server.Info.Id;
                msgData.ServerVersion                = server.Info.ServerVersion;
                msgData.Password                     = server.Info.Password;
                msgData.Cheats                       = server.Info.Cheats;
                msgData.Description                  = server.Info.Description;
                msgData.DropControlOnExit            = server.Info.DropControlOnExit;
                msgData.DropControlOnExitFlight      = server.Info.DropControlOnExitFlight;
                msgData.DropControlOnVesselSwitching = server.Info.DropControlOnVesselSwitching;
                msgData.ExternalEndpoint             = $"{server.ExternalEndpoint.Address}:{server.ExternalEndpoint.Port}";
                msgData.GameMode                     = server.Info.GameMode;
                msgData.InternalEndpoint             = $"{server.InternalEndpoint.Address}:{server.InternalEndpoint.Port}";
                msgData.MaxPlayers                   = server.Info.MaxPlayers;
                msgData.ModControl                   = server.Info.ModControl;
                msgData.PlayerCount                  = server.Info.PlayerCount;
                msgData.ServerName                   = server.Info.ServerName;
                msgData.VesselUpdatesSendMsInterval  = server.Info.VesselUpdatesSendMsInterval;
                msgData.WarpMode                     = server.Info.WarpMode;
                msgData.TerrainQuality               = server.Info.TerrainQuality;

                var msg    = MasterServerMessageFactory.CreateNew <MainMstSrvMsg>(msgData);
                var outMsg = peer.CreateMessage(msg.GetMessageSize());

                msg.Serialize(outMsg);
                peer.SendUnconnectedMessage(outMsg, netMsg.SenderEndPoint);
                peer.FlushSendQueue();
                msg.Recycle();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Return the list of servers that match the version specified
        /// </summary>
        private static void SendServerLists(NetIncomingMessage netMsg, NetPeer peer)
        {
            var values = ServerDictionary.Values.OrderBy(v => v.Info.Id).ToArray();

            var msgData = MasterServerMessageFactory.CreateNewMessageData <MsReplyServersMsgData>();

            msgData.ServersCount                 = values.Length;
            msgData.Id                           = values.Select(s => s.Info.Id).ToArray();
            msgData.ServerVersion                = values.Select(s => s.Info.ServerVersion).ToArray();
            msgData.Cheats                       = values.Select(s => s.Info.Cheats).ToArray();
            msgData.Description                  = values.Select(s => s.Info.Description).ToArray();
            msgData.DropControlOnExit            = values.Select(s => s.Info.DropControlOnExit).ToArray();
            msgData.DropControlOnExitFlight      = values.Select(s => s.Info.DropControlOnExit).ToArray();
            msgData.DropControlOnVesselSwitching = values.Select(s => s.Info.DropControlOnExit).ToArray();
            msgData.ExternalEndpoint             = values.Select(s => $"{s.ExternalEndpoint.Address}:{s.ExternalEndpoint.Port}").ToArray();
            msgData.GameMode                     = values.Select(s => s.Info.GameMode).ToArray();
            msgData.InternalEndpoint             = values.Select(s => $"{s.InternalEndpoint.Address}:{s.InternalEndpoint.Port}").ToArray();
            msgData.MaxPlayers                   = values.Select(s => s.Info.MaxPlayers).ToArray();
            msgData.ModControl                   = values.Select(s => s.Info.ModControl).ToArray();
            msgData.PlayerCount                  = values.Select(s => s.Info.PlayerCount).ToArray();
            msgData.ServerName                   = values.Select(s => s.Info.ServerName).ToArray();
            msgData.VesselUpdatesSendMsInterval  = values.Select(s => s.Info.VesselUpdatesSendMsInterval).ToArray();
            msgData.WarpMode                     = values.Select(s => s.Info.WarpMode).ToArray();
            msgData.TerrainQuality               = values.Select(s => s.Info.TerrainQuality).ToArray();

            var msg    = MasterServerMessageFactory.CreateNew <MainMstSrvMsg>(msgData);
            var outMsg = peer.CreateMessage(msg.GetMessageSize());

            msg.Serialize(outMsg);
            peer.SendUnconnectedMessage(outMsg, netMsg.SenderEndPoint);
            peer.FlushSendQueue();
            msg.Recycle();
        }
Esempio n. 3
0
        /// <summary>
        /// Return the list of servers that match the version specified
        /// </summary>
        private static void SendServerLists(NetIncomingMessage netMsg, NetPeer peer, string version)
        {
            var values  = ServerDictionary.Values.Where(s => s.Info.Version == version).OrderBy(v => v.Info.Id);
            var msgData = new MsReplyServersMsgData
            {
                Id                           = values.Select(s => s.Info.Id).ToArray(),
                Cheats                       = values.Select(s => s.Info.Cheats).ToArray(),
                Description                  = values.Select(s => s.Info.Description).ToArray(),
                DropControlOnExit            = values.Select(s => s.Info.DropControlOnExit).ToArray(),
                DropControlOnExitFlight      = values.Select(s => s.Info.DropControlOnExit).ToArray(),
                DropControlOnVesselSwitching = values.Select(s => s.Info.DropControlOnExit).ToArray(),
                ExternalEndpoint             = values.Select(s => s.ExternalEndpoint.Address + ":" + s.ExternalEndpoint.Port).ToArray(),
                GameMode                     = values.Select(s => s.Info.GameMode).ToArray(),
                InternalEndpoint             = values.Select(s => s.InternalEndpoint.Address + ":" + s.InternalEndpoint.Port).ToArray(),
                MaxPlayers                   = values.Select(s => s.Info.MaxPlayers).ToArray(),
                ModControl                   = values.Select(s => s.Info.ModControl).ToArray(),
                PlayerCount                  = values.Select(s => s.Info.PlayerCount).ToArray(),
                ServerName                   = values.Select(s => s.Info.ServerName).ToArray(),
                VesselUpdatesSendMsInterval  = values.Select(s => s.Info.VesselUpdatesSendMsInterval).ToArray(),
                WarpMode                     = values.Select(s => s.Info.WarpMode).ToArray()
            };

            var msg  = MasterServerMessageFactory.CreateNew <MainMstSrvMsg>(msgData);
            var data = MasterServerMessageFactory.Serialize(msg);

            var outMsg = peer.CreateMessage(data.Length);

            outMsg.Write(data);
            peer.SendUnconnectedMessage(outMsg, netMsg.SenderEndPoint);
            peer.FlushSendQueue();
        }
Esempio n. 4
0
        public void SendMessageToClient(DataMessage msg)
        {
            if (server.ConnectionsCount > 0)
            {
                NetworkMessage sm = new NetworkMessage();


                // Temporary
                switch (msg.type)
                {
                case DataMessage_Type.GAME_STATE:
                    GameStateMessage gameStateMsg = msg as GameStateMessage;
                    sm.Set_Data(gameStateMsg);
                    break;

                case DataMessage_Type.PLAYER_UPDATE:
                    PlayerUpdateMessage playerMsg = msg as PlayerUpdateMessage;
                    sm.Set_Data(playerMsg);
                    break;

                case DataMessage_Type.FENCE_HIT:
                    FenceHitMessage fMsg = msg as FenceHitMessage;
                    sm.Set_Data(fMsg);
                    break;

                case DataMessage_Type.MISSLE_MINE:
                    MissileMineMessage MMMsg = msg as MissileMineMessage;
                    sm.Set_Data(msg);
                    break;

                case DataMessage_Type.ROTATION:
                    RotationMessage rMsg = msg as RotationMessage;
                    sm.Set_Data(msg);
                    break;

                case DataMessage_Type.MISSILEUPDATE:
                    MissileUpdateMessage tmsg = msg as MissileUpdateMessage;
                    sm.Set_Data(msg);
                    break;

                case DataMessage_Type.GAME_OVER:
                    GAMEOVERMESSAGE gomsg = msg as GAMEOVERMESSAGE;
                    sm.Set_Data(msg);
                    break;

                default:
                    break;
                }

                NetOutgoingMessage om = server.CreateMessage();

                om.Write(sm.Serialize());
                server.SendMessage(om, server.Connections, NetDeliveryMethod.ReliableOrdered, 4);

                server.FlushSendQueue();
            }
        }
Esempio n. 5
0
        public bool sendMessage(Protocol.Type protocol, string text, NetIncomingMessage recipient)
        {
            NetOutgoingMessage om = peer.CreateMessage();

            om.Write((int)protocol);
            om.Write(text);
            peer.SendMessage(om, recipient.SenderConnection, NetDeliveryMethod.ReliableOrdered);
            //peer.sen
            peer.FlushSendQueue();
            return(true);
        }
Esempio n. 6
0
        internal void SilentUpdate()
        {
            if (IsDisposed)
            {
                return;
            }

            // Recycle inbound packets that the user has read from the last frame
            foreach (var localGamer in localGamers)
            {
                localGamer.RecycleInboundPackets();
            }

            ReceiveMessages();

            if (IsDisposed)
            {
                return;
            }

            // Add delayed inbound packets if sender has joined (Might add new inbound packets)
            foreach (var localGamer in localGamers)
            {
                localGamer.TryAddDelayedInboundPackets();
            }

            RegisterWithMasterServer();

            peer.FlushSendQueue();

            UpdateMachineRoundtrips();

            gameStartRequestThisFrame  = false;
            gameEndRequestThisFrame    = false;
            resetReadyRequestThisFrame = false;
        }
Esempio n. 7
0
        /// <summary>
        /// Return the list of servers that match the version specified
        /// </summary>
        private static void SendServerLists(NetIncomingMessage netMsg, NetPeer peer)
        {
            foreach (var server in ServerDictionary.Values.ToArray())
            {
                var msgData = MasterServerMessageFactory.CreateNewMessageData <MsReplyServersMsgData>();

                msgData.Id            = server.Id;
                msgData.ServerVersion = server.ServerVersion;
                msgData.Password      = server.Password;
                msgData.Cheats        = server.Cheats;
                msgData.Description   = server.Description;
                msgData.Country       = server.Country;
                msgData.Website       = server.Website;
                msgData.WebsiteText   = server.WebsiteText;
                msgData.RainbowEffect = server.RainbowEffect;
                Array.Copy(server.Color, msgData.Color, 3);
                msgData.ExternalEndpoint            = server.ExternalEndpoint;
                msgData.GameMode                    = server.GameMode;
                msgData.InternalEndpoint            = server.InternalEndpoint;
                msgData.InternalEndpoint6           = server.InternalEndpoint6;
                msgData.MaxPlayers                  = server.MaxPlayers;
                msgData.ModControl                  = server.ModControl;
                msgData.DedicatedServer             = server.DedicatedServer;
                msgData.PlayerCount                 = server.PlayerCount;
                msgData.ServerName                  = server.ServerName;
                msgData.VesselUpdatesSendMsInterval = server.VesselUpdatesSendMsInterval;
                msgData.WarpMode                    = server.WarpMode;
                msgData.TerrainQuality              = server.TerrainQuality;

                var msg    = MasterServerMessageFactory.CreateNew <MainMstSrvMsg>(msgData);
                var outMsg = peer.CreateMessage(msg.GetMessageSize());

                msg.Serialize(outMsg);
                peer.SendUnconnectedMessage(outMsg, netMsg.SenderEndPoint);

                //Force send of packets
                peer.FlushSendQueue();
            }
        }
 public void Flush()
 {
     _netPeer.FlushSendQueue();
 }