public MultiplayerLobbyScreen(ServerInfo serverInfo, ButtonDelegate buttonDelegate, bool isServer) { this.serverInfo = serverInfo; viewsLookup = new Dictionary<NetConnection, ClientInfoView>(); View contentView = new View(512, 363); contentView.alignX = View.ALIGN_CENTER; contentView.x = 0.5f * width; contentView.y = 48; Font font = GetDefaultFont(); contentView.AddView(new View(215, 145)); TextView serverName = new TextView(font, serverInfo.name); serverName.alignX = View.ALIGN_CENTER; serverName.x = 113; serverName.y = 155; contentView.AddView(serverName); clientsView = new View(286, contentView.height); clientsView.alignX = View.ALIGN_MAX; clientsView.x = contentView.width; contentView.AddView(clientsView); AddView(contentView); View buttons = new View(); buttons.x = 0.5f * width; buttons.y = 432; buttons.alignX = View.ALIGN_CENTER; buttons.alignY = View.ALIGN_MAX; Button button = new TempButton("BACK"); button.buttonDelegate = buttonDelegate; button.id = (int)ButtonId.Back; buttons.AddView(button); SetCancelButton(button); String label = isServer ? "START" : "READY"; ButtonId buttonId = isServer ? ButtonId.Start : ButtonId.Ready; button = new TempButton(label); button.buttonDelegate = buttonDelegate; button.id = (int)buttonId; buttons.AddView(button); buttons.LayoutHor(10); buttons.ResizeToFitViews(); AddView(buttons); }
internal static ServerInfo ReadServerInfo(NetIncomingMessage message) { // name String name = message.ReadString(); // scheme Scheme scheme = new Scheme(); // scheme: name scheme.name = message.ReadString(); // scheme: field data int fieldWidth = message.ReadInt32(); int fieldHeight = message.ReadInt32(); FieldBlocks[] fieldDataArray = new FieldBlocks[fieldWidth * fieldHeight]; for (int i = 0; i < fieldDataArray.Length; ++i) { fieldDataArray[i] = (FieldBlocks)message.ReadByte(); } scheme.fieldData = new FieldData(fieldWidth, fieldHeight, fieldDataArray); // scheme: player locations int locationsCount = message.ReadByte(); PlayerLocationInfo[] playerLocations = new PlayerLocationInfo[locationsCount]; for (int i = 0; i < locationsCount; ++i) { int x = message.ReadByte(); int y = message.ReadByte(); int team = message.ReadByte(); playerLocations[i] = new PlayerLocationInfo(i, x, y, team); } scheme.playerLocations = playerLocations; ServerInfo info = new ServerInfo(name, message.SenderEndPoint); info.scheme = scheme; return info; }
////////////////////////////////////////////////////////////////////////////// private void StartLobbyScreen(ServerInfo info, bool isServer) { Screen screen = new MultiplayerLobbyScreen(serverInfo, OnLobbyScreenButtonPressed, isServer); screen.id = (int)ScreenId.Lobby; StartNextScreen(screen); }
private void StopPeer() { serverInfo = null; GetNetwork().Stop(); }
private void OnButtonPressed(Button button) { MultiplayerScreen.ButtonId buttonId = (MultiplayerScreen.ButtonId)button.id; switch (buttonId) { case MultiplayerScreen.ButtonId.Back: { Stop(ExitCode.Cancel); break; } case MultiplayerScreen.ButtonId.Create: { StopDiscovery(false); String hostName = CVars.sv_hostname.value; Scheme scheme = Application.Assets().LoadAsset<Scheme>("Content\\maps\\x.sch"); serverInfo = new ServerInfo(hostName); serverInfo.scheme = scheme; StartLobbyScreen(serverInfo, true); StartServer(); break; } case MultiplayerScreen.ButtonId.Join: { ServerInfo info = button.data as ServerInfo; Debug.Assert(info != null); serverInfo = info; StartClient(info.endPoint); break; } case MultiplayerScreen.ButtonId.Refresh: { StopDiscovery(false); StartDiscovery(); break; } } }
private void OnLocalServerFound(ServerInfo info) { Log.d("Found local server: " + info.endPoint); foundServers.Add(info); }
internal static void WriteServerInfo(NetOutgoingMessage message, ServerInfo info) { // name message.Write(info.name); // scheme Scheme scheme = info.scheme; // scheme: name message.Write(scheme.name); // scheme: field data FieldData fieldData = scheme.fieldData; message.Write(fieldData.GetWidth()); message.Write(fieldData.GetHeight()); FieldBlocks[] blocks = fieldData.GetDataArray(); for (int i = 0; i < blocks.Length; ++i) { byte block = (byte)blocks[i]; message.Write(block); } // scheme: player locations PlayerLocationInfo[] playerLocations = scheme.GetPlayerLocations(); message.Write((byte)playerLocations.Length); for (int i = 0; i < playerLocations.Length; ++i) { message.Write((byte)playerLocations[i].x); message.Write((byte)playerLocations[i].y); message.Write((byte)playerLocations[i].team); } }
public ServerView(ServerInfo server) : base(154, 143) { Font font = Helper.fontButton; nameView = new TextView(font, server.name); nameView.alignX = View.ALIGN_CENTER; nameView.x = 0.5f * width; nameView.y = 104; AddView(nameView); }
////////////////////////////////////////////////////////////////////////////// private void Stop(ExitCode code, ServerInfo serverInfo = null) { Stop((int)code, serverInfo); }
private void StartServer() { String hostName = CVars.sv_hostname.value; Scheme scheme = BmApplication.Assets().GetScheme(A.maps_x); serverInfo = new ServerInfo(hostName); serverInfo.scheme = scheme; GetNetwork().StartServer(); GetNetwork().StartListeningForServerDiscovery(); }
private void OnLocalServerFound(ServerInfo info) { Log.d("Found local server: " + info.endPoint); StopDiscovery(); serverInfo = info; StartClient(info.endPoint); }