public override void Load()
        {
            bgContainer = new Sprite();
            bgLayers = new Sprite[3];
            AddChild(bgContainer);
            for (int i = 0; i < 3; ++i)
            {
                bgLayers[i] = new Sprite();

                var bmp1 = new Bitmap(Assets.GetBitmapData("assets/background/1/" + (i + 1).ToString(), true));
                var bmp2 = new Bitmap(Assets.GetBitmapData("assets/background/1/" + (i + 1).ToString(), true));

                bmp2.X = bmp1.Width;

                bgLayers[i].AddChild(bmp1);
                bgLayers[i].AddChild(bmp2);

                bgContainer.AddChild(bgLayers[i]);
            }
            // GUI
            guiContainer = new Sprite();
            AddChild(guiContainer);

            NetPeerConfiguration config = new NetPeerConfiguration("multiplanes-network");
            client = new NetClient(config);
            client.Start();
            client.DiscoverLocalPeers(14242);
            client.DiscoverKnownPeer(GameClient.NET_ADRESS, GameClient.NET_PORT);

            nick = NickGenerator.GenerateNick(client.UniqueIdentifier);

            var screenNameLabel = new TextField();
            screenNameLabel.font = Assets.GetFont("assets/MainFont");
            screenNameLabel.text = "HOST GAME";
            screenNameLabel.X = GameMain.ScreenWidth / 2 - screenNameLabel.Width / 2;
            screenNameLabel.Y = 10 / GameMain.mainScale;
            guiContainer.AddChild(screenNameLabel);

            var roomNameLabel = new TextField();
            roomNameLabel.font = screenNameLabel.font;
            roomNameLabel.text = "Room name: " + nick;
            roomNameLabel.X = GameMain.ScreenWidth * 0.1f;
            roomNameLabel.Y = GameMain.ScreenHeight / 2 - roomNameLabel.Height / 2;
            roomNameLabel.ScaleX = roomNameLabel.ScaleY = 0.5f;
            guiContainer.AddChild(roomNameLabel);

            waitLabel = new TextField();
            waitLabel.font = roomNameLabel.font;
            waitLabel.text = "Waiting for other player to connect. . .";
            waitLabel.X = roomNameLabel.X;
            waitLabel.Y = roomNameLabel.Y + roomNameLabel.Height;
            waitLabel.ScaleX = waitLabel.ScaleY = 0.25f;
            guiContainer.AddChild(waitLabel);
        }
        /// <summary>
        /// Requests the information from a server with a 10 second timeout. If a response is not
        /// received, it returns null. Otherwise, it returns the information provided by the server.
        /// </summary>
        /// <param name="server"></param>
        /// <param name="port"></param>
        /// <returns></returns>
        public static Task <DiscoveryResponse> RequestServerInfo(string server, ushort port)
        {
            return(Task.Run(() =>
            {
                var client = new Lidgren.Network.NetClient(new NetPeerConfiguration("MPTANKS"));
                client.Configuration.EnableMessageType(NetIncomingMessageType.DiscoveryRequest);
                client.Configuration.EnableMessageType(NetIncomingMessageType.DiscoveryResponse);

                client.DiscoverKnownPeer(server, port);

                var msg = client.WaitMessage(10000);

                if (msg == null)
                {
                    return null;
                }
                if (msg.MessageType == NetIncomingMessageType.DiscoveryResponse)
                {
                    try { return Read(msg); } catch { }
                }

                return null;
            }));
        }
Exemple #3
0
        bool checkButtons()
        {
            if (createButton.Triggered)
            {
                cleanup();
                returnControl("create");
                return true;
            }
            else if (joinLanButton.Triggered)
            {
                NetPeerConfiguration config = new NetPeerConfiguration("rts");
                config.Port = 14243;

                client = new NetClient(config);
                client.Start();

                //client.Configuration.SimulatedMinimumLatency = .5f;
                //client.Configuration.SimulatedRandomLatency = .01f;

                client.DiscoverLocalPeers(14242);

                state = StartMenuState.Joining;
            }
            else if (joinIPButton.Triggered)
            {
                if (!File.Exists("C:\\rts hosts.txt"))
                    File.Create("C:\\rts hosts.txt");

                string[] hosts = File.ReadAllLines("C:\\rts hosts.txt");

                NetPeerConfiguration config = new NetPeerConfiguration("rts");
                config.Port = 14243;

                client = new NetClient(config);
                client.Start();

                //client.Configuration.SimulatedMinimumLatency = .5f;
                //client.Configuration.SimulatedRandomLatency = .01f;

                foreach (string host in hosts)
                    client.DiscoverKnownPeer(host, 14242);

                state = StartMenuState.Joining;
            }
            else if (exitButton.Triggered)
            {
                cleanup();
                returnControl("exit");
                return true;
            }

            return false;
        }
        public override void Load()
        {
            // Background
            bgContainer = new Sprite();
            bgLayers = new Sprite[3];
            AddChild(bgContainer);
            for (int i = 0; i < 3; ++i)
            {
                bgLayers[i] = new Sprite();

                var bmp1 = new Bitmap(Assets.GetBitmapData("assets/background/1/" + (i + 1).ToString(), true));
                var bmp2 = new Bitmap(Assets.GetBitmapData("assets/background/1/" + (i + 1).ToString(), true));

                bmp2.X = bmp1.Width;

                bgLayers[i].AddChild(bmp1);
                bgLayers[i].AddChild(bmp2);

                bgContainer.AddChild(bgLayers[i]);
            }
            // GUI
            guiContainer = new Sprite();
            AddChild(guiContainer);

            hosts = new List<HostLabel>();

            font = Assets.GetFont("assets/MainFont");

            var screenNameLabel = new TextField();
            screenNameLabel.font = font;
            screenNameLabel.text = "JOIN GAME";
            screenNameLabel.X = GameMain.ScreenWidth / 2 - screenNameLabel.Width / 2;
            screenNameLabel.Y = 10 / GameMain.mainScale;
            guiContainer.AddChild(screenNameLabel);

            pointerLabel = new TextField();
            pointerLabel.font = screenNameLabel.font;
            pointerLabel.text = "Select a game to join";
            pointerLabel.ScaleX = pointerLabel.ScaleY = 0.4f;
            pointerLabel.X = GameMain.ScreenWidth / 2 - pointerLabel.Width / 2;
            pointerLabel.Y = screenNameLabel.Y + screenNameLabel.Height;
            guiContainer.AddChild(pointerLabel);

            connectButton = new TextField();
            connectButton.font = font;
            connectButton.text = "Connect";
            connectButton.ScaleX = connectButton.ScaleY = 0.5f;
            connectButton.X = GameMain.ScreenWidth * 0.25f - connectButton.Width / 2;
            connectButton.Y = GameMain.ScreenHeight - connectButton.Height;
            connectButton.textColor = Color.DarkGray;
            guiContainer.AddChild(connectButton);

            refreshButton = new TextField();
            refreshButton.font = font;
            refreshButton.text = "Refresh";
            refreshButton.ScaleX = refreshButton.ScaleY = 0.5f;
            refreshButton.X = GameMain.ScreenWidth * 0.75f - refreshButton.Width / 2;
            refreshButton.Y = connectButton.Y;
            guiContainer.AddChild(refreshButton);

            connectButton.AddEventListener(Event.TOUCH_END, onButtonDown);
            refreshButton.AddEventListener(Event.TOUCH_END, onButtonDown);

            NetPeerConfiguration config = new NetPeerConfiguration("multiplanes-network");
            client = new NetClient(config);
            client.Start();
            nick = NickGenerator.GenerateNick((client.UniqueIdentifier));
            client.DiscoverLocalPeers(14242);
            client.DiscoverKnownPeer(GameClient.NET_ADRESS, GameClient.NET_PORT);
        }
Exemple #5
0
        public void Connect()
        {
            if (netClient != null && netClient.Status == NetPeerStatus.Running)
                return;

            isConnected = false;

            netConfig.EnableMessageType(NetIncomingMessageType.DiscoveryResponse);

            // Create a client
            netClient = new NetClient(netConfig);
            netClient.Start();

            try
            {
                if (waitForServer)
                {
                    Thread connectionThread = new Thread(new ThreadStart(TryConnect));
                    connectionThread.Start();
                }
                else
                {
                    if (isLocalAddress)
                        netClient.DiscoverLocalPeers(portNumber);
                    else
                        netClient.DiscoverKnownPeer(hostPoint);
                }
            }
            catch (SocketException se)
            {
                Log.Write("Socket exception is thrown in Connect: " + se.StackTrace);
            }
        }
        public void Load()
        {
            isFinished = false;

            // create client configuration
            clientConfig = new NetPeerConfiguration("pacman");
            //configure client
            client = new NetClient(clientConfig);
            //Start client
            client.Start();

            if (client != null)
            {
                NetIncomingMessage msg;
                bool waitingForServer = true;

                // Contact Server
                client.DiscoverKnownPeer("localhost", 666);
                //client.DiscoverLocalPeers(666);

                while (waitingForServer)
                {
                    while ((msg = client.ReadMessage()) != null)
                    {
                        switch (msg.MessageType)
                        {
                            case NetIncomingMessageType.DiscoveryResponse:
                                try
                                {
                                    client.Connect(msg.SenderEndpoint);
                                    //waitingForServer = false;
                                }
                                catch (Exception e)
                                {
                                    System.Console.WriteLine(e.ToString());
                                    //waitingForServer = false;
                                }
                                break;
                            case NetIncomingMessageType.Data:
                                if (msg.ReadString() == "connected")
                                {
                                    waitingForServer = false;
                                }
                                break;
                        }
                    }

                    if (timeoutCount > timeoutLimit)
                    {
                        waitingForServer = false;
                    }
                    double elapsedTime = gameTime.ElapsedGameTime.TotalMilliseconds;
                    timeoutCount += elapsedTime;
                }
            }

            foreach (GameScreen screen in gameScreens)
            {
                if (screen is ConfigMultiplayerScreen)
                {
                    //((ConfigMultiplayerScreen)screen).setClient(client);
                    //((ConfigMultiplayerScreen)screen).setConntectedServer(client.ServerConnection.RemoteEndpoint.Address.ToString());
                }
                screenManager.AddScreen(screen, PlayerIndex.One);
            }

            isFinished = true;
        }