public void DiscoverAndConnect()
        {
            // Create a server
            using var server = new LanServerWorld("Unit Test World");
            server.Start();

            // Create discovery
            using var discovery = new LanDiscovery();
            discovery.Start();

            // Sleep 5 seconds for discovery
            Thread.Sleep(5000);

            // Get the servers
            var servers = discovery.GameServers;

            Assert.IsTrue(servers.ContainsKey("Unit Test World"));

            // Connect to server
            using var client = new LanClientWorld(servers["Unit Test World"]);
            client.Start();
        }
Пример #2
0
        public override void receiveLeftClick(int x, int y, bool playSound = true)
        {
            if (pendingClient != null)
            {
                return;
            }

            if (showingFriends && pendingConns.Count == 0)
            {
                friends.leftClick(x, y);
            }
            if (showingLan)
            {
                lan.leftClick(x, y);
            }

            if (!didModeSelect)
            {
                Rectangle r = new Rectangle(buttonX, buttonY1, buttonW, buttonH);
                if (r.Contains(x, y))
                {
                    Multiplayer.mode   = Mode.Singleplayer;
                    Multiplayer.client = null;
                    Multiplayer.server = null;
                    didModeSelect      = true;
                    readyToLoad        = true;
                }
                r.Y = buttonY2;
                if (r.Contains(x, y))
                {
                    Multiplayer.mode = Mode.Host;
                    didModeSelect    = true;

                    portBox        = new TextBox(Game1.content.Load <Texture2D>("LooseSprites\\textBox"), null, Game1.smallFont, Game1.textColor);
                    portBox.Width *= 3;
                    portBox.X      = buttonX + buttonW / 2 - (SpriteText.getWidthOfString("IP Address:") + portBox.Width + 20) / 2 + SpriteText.getWidthOfString("IP Address:") + 20;
                    portBox.Y      = buttonY2 + buttonH / 2 - portBox.Height / 2;
                    portBox.Text   = MultiplayerMod.ModConfig.DefaultPort;
                }
                r.Y = buttonY3;
                if (r.Contains(x, y))
                {
                    Multiplayer.mode = Mode.Client;
                    didModeSelect    = true;

                    ipBox        = new TextBox(Game1.content.Load <Texture2D>("LooseSprites\\textBox"), null, Game1.smallFont, Game1.textColor);
                    ipBox.Width *= 3;
                    ipBox.X      = buttonX + buttonW / 2 - (SpriteText.getWidthOfString("IP Address:") + ipBox.Width + 20) / 2 + SpriteText.getWidthOfString("IP Address:") + 20;
                    ipBox.Y      = buttonY1 + buttonH / 2 - ipBox.Height / 2;
                    ipBox.Text   = MultiplayerMod.ModConfig.DefaultIP;

                    portBox        = new TextBox(Game1.content.Load <Texture2D>("LooseSprites\\textBox"), null, Game1.smallFont, Game1.textColor);
                    portBox.Width *= 3;
                    portBox.X      = buttonX + buttonW / 2 - (SpriteText.getWidthOfString("IP Address:") + portBox.Width + 20) / 2 + SpriteText.getWidthOfString("IP Address:") + 20;
                    portBox.Y      = buttonY2 + buttonH / 2 - portBox.Height / 2;
                    portBox.Text   = MultiplayerMod.ModConfig.DefaultPort;
                }
            }
            else if (modeInit == null)
            {
                if (Multiplayer.mode == Mode.Client)
                {
                    Rectangle r1 = new Rectangle(Game1.viewport.Width / 4, 20, SpriteText.getWidthOfString("Network"), SpriteText.getHeightOfString("Network"));
                    Rectangle r2 = new Rectangle(Game1.viewport.Width / 2 - 50, 20, SpriteText.getWidthOfString("Friends"), SpriteText.getHeightOfString("Friends"));
                    Rectangle r3 = new Rectangle(Game1.viewport.Width / 4 * 3 - 100, 20, SpriteText.getWidthOfString("LAN"), SpriteText.getHeightOfString("LAN"));

                    if (r1.Contains(x, y))
                    {
                        showingFriends = false;
                        showingLan     = false;
                        Log.trace("Changing to network tab");
                    }
                    else if (r2.Contains(x, y) && friends != null)
                    {
                        showingFriends = true;
                        showingLan     = false;
                        Log.trace("Changing to friends tab");
                    }
                    else if (r3.Contains(x, y))
                    {
                        showingFriends = false;
                        showingLan     = true;
                        Log.trace("Changing to LAN tab");

                        lan.start();
                    }
                }
                else if (Multiplayer.mode == Mode.Host)
                {
                    Rectangle r1 = new Rectangle(x, buttonY1 + 48, 64, 64);
                    if (r1.Contains(x, y))
                    {
                        allowFriends = !allowFriends;
                    }
                    r1.Y += 80;
                    if (r1.Contains(x, y))
                    {
                        allowLan = !allowLan;
                    }
                }

                Multiplayer.problemStarting = false;
                if (!showingFriends && !showingLan)
                {
                    if (ipBox != null)
                    {
                        ipBox.Update();
                    }
                    if (portBox != null)
                    {
                        portBox.Update();
                    }
                }

                Rectangle r = new Rectangle(buttonX, buttonY3 + buttonH, buttonW, buttonH);
                if (r.Contains(x, y) && !showingFriends && !showingLan)
                {
                    MultiplayerMod.ModConfig.DefaultPort = portBox.Text;
                    Multiplayer.portStr = portBox.Text;
                    if (Multiplayer.mode == Mode.Host)
                    {
                        MultiplayerMod.ModConfig.AllowFriends      = allowFriends;
                        MultiplayerMod.ModConfig.AllowLanDiscovery = allowLan;
                        modeInit = new Thread(Multiplayer.startHost);
                        IPlatform.instance.onFriendConnected = new Action <Friend, PlatformConnection>(onFriendConnected);

                        if (allowLan)
                        {
                            string name = Path.GetFileNameWithoutExtension(path);
                            name = name.Substring(0, name.LastIndexOf('_'));
                            LanDiscovery.startServer(name, int.Parse(portBox.Text));
                        }
                    }
                    else if (Multiplayer.mode == Mode.Client)
                    {
                        MultiplayerMod.ModConfig.DefaultIP = ipBox.Text;
                        Multiplayer.ipStr = ipBox.Text;
                        modeInit          = new Thread(Multiplayer.startClient);
                    }
                    MultiplayerMod.instance.Helper.WriteConfig(MultiplayerMod.ModConfig);
                    modeInit.Start();
                    ChatMenu.chat.Clear();
                    ChatMenu.chat.Add(new ChatEntry(null, "NOTE: Chat doesn't work on the connection menu."));
                }
            }
            else if (Multiplayer.problemStarting)
            {
                Rectangle r = new Rectangle(buttonX, buttonY3, buttonW, buttonH);
                if (r.Contains(x, y))
                {
                    Multiplayer.client = null;
                    Multiplayer.server = null;
                    readyToLoad        = false;

                    didModeSelect = false;
                    modeInit      = null;
                    Multiplayer.problemStarting = false;
                }
            }
            else if (Multiplayer.mode == Mode.Host)
            {
                if (pendingConns.Count != 0)
                {
                    justClicked = true;
                }
                else
                {
                    Rectangle r = new Rectangle(buttonX, buttonY3, buttonW, buttonH);
                    if (r.Contains(x, y))
                    {
                        Log.debug("Stopping listener, beginning loading");
                        Multiplayer.listener.Server.Close();
                        readyToLoad = true;
                    }
                }
            }
        }
Пример #3
0
 public void start()
 {
     LanDiscovery.onDiscovery = new Action <string, IPEndPoint, int>(onDiscovery);
     LanDiscovery.startClient();
 }