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(); }
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; } } } }
public void start() { LanDiscovery.onDiscovery = new Action <string, IPEndPoint, int>(onDiscovery); LanDiscovery.startClient(); }