void Server_UserManagementService_AddUserEvent(UserManagementServerNetworkService sender,
                                                       UserManagementServerNetworkService.UserInfo user)
        {
            GameNetworkServer server = GameNetworkServer.Instance;

            //send map name to new client
            server.CustomMessagesService.SendToClient(user.ConnectedNode, "Lobby_MapName",
                                                      SelectedMapName);
            //send AllowToConnectDuringGame flag to new client
            server.CustomMessagesService.SendToClient(user.ConnectedNode,
                                                      "Lobby_AllowToConnectDuringGame", checkBoxAllowToConnectDuringGame.Checked.ToString());
        }
示例#2
0
 void UserManagementService_RemoveUserEvent(UserManagementServerNetworkService sender,
                                            UserManagementServerNetworkService.UserInfo user)
 {
     listBoxUsers.Items.Remove(user);
     Log("User disconnected: " + user.ToString());
 }
示例#3
0
 void UserManagementService_AddUserEvent(UserManagementServerNetworkService sender,
                                         UserManagementServerNetworkService.UserInfo user)
 {
     Log("User connected: " + user.ToString());
     listBoxUsers.Items.Add(user);
 }
        void UpdateUserList()
        {
            //server
            GameNetworkServer server = GameNetworkServer.Instance;

            if (server != null)
            {
                UserManagementServerNetworkService userService = server.UserManagementService;

                bool shouldUpdate = false;
                if (userService.Users.Count == listBoxUsers.Items.Count)
                {
                    int index = 0;

                    foreach (UserManagementServerNetworkService.UserInfo user in userService.Users)
                    {
                        if (user != listBoxUsers.Items[index])
                        {
                            shouldUpdate = true;
                        }
                        index++;
                    }
                }
                else
                {
                    shouldUpdate = true;
                }

                if (shouldUpdate)
                {
                    //update list box
                    listBoxUsers.Items.Clear();
                    foreach (UserManagementServerNetworkService.UserInfo user in userService.Users)
                    {
                        listBoxUsers.Items.Add(user);
                    }
                }
            }

            //client
            GameNetworkClient client = GameNetworkClient.Instance;

            if (client != null)
            {
                UserManagementClientNetworkService userService = client.UserManagementService;

                bool shouldUpdate = false;
                if (userService.Users.Count == listBoxUsers.Items.Count)
                {
                    int index = 0;

                    foreach (UserManagementClientNetworkService.UserInfo user in userService.Users)
                    {
                        if (user != listBoxUsers.Items[index])
                        {
                            shouldUpdate = true;
                        }
                        index++;
                    }
                }
                else
                {
                    shouldUpdate = true;
                }

                if (shouldUpdate)
                {
                    //update list box
                    listBoxUsers.Items.Clear();
                    foreach (UserManagementClientNetworkService.UserInfo user in userService.Users)
                    {
                        listBoxUsers.Items.Add(user);
                    }
                }
            }
        }
        protected override void OnRenderUI(GuiRenderer renderer)
        {
            base.OnRenderUI(renderer);

            UpdateHUD();

            //render user names for moving pieces by users
            foreach (Entity entity in Map.Instance.Children)
            {
                JigsawPuzzlePiece piece = entity as JigsawPuzzlePiece;
                if (piece != null)
                {
                    string userName = null;

                    if (EntitySystemWorld.Instance.IsServer())
                    {
                        if (piece.Server_MovingByUser != null)
                        {
                            userName = piece.Server_MovingByUser.Name;
                        }
                    }
                    if (EntitySystemWorld.Instance.IsClientOnly())
                    {
                        if (piece.Client_MovingByUser != null)
                        {
                            userName = piece.Client_MovingByUser.Name;
                        }
                    }

                    if (!string.IsNullOrEmpty(userName))
                    {
                        Vec2 screenPosition;
                        if (RendererWorld.Instance.DefaultCamera.ProjectToScreenCoordinates(
                                piece.Position, out screenPosition))
                        {
                            renderer.AddText(userName,
                                             screenPosition, HorizontalAlign.Left, VerticalAlign.Top,
                                             new ColorValue(0, 1, 0, .75f));
                        }
                    }
                }
            }

            //show list of users
            if (GameNetworkServer.Instance != null || GameNetworkClient.Instance != null)
            {
                List <string> lines = new List <string>();

                lines.Add("Players:");

                if (GameNetworkServer.Instance != null)
                {
                    UserManagementServerNetworkService userService =
                        GameNetworkServer.Instance.UserManagementService;

                    foreach (UserManagementServerNetworkService.UserInfo user in userService.Users)
                    {
                        string line = "  " + user.Name;
                        if (user == userService.ServerUser)
                        {
                            line += " (you)";
                        }
                        lines.Add(line);
                    }
                }

                if (GameNetworkClient.Instance != null)
                {
                    UserManagementClientNetworkService userService =
                        GameNetworkClient.Instance.UserManagementService;

                    foreach (UserManagementClientNetworkService.UserInfo user in userService.Users)
                    {
                        string line = "  " + user.Name;
                        if (user == userService.ThisUser)
                        {
                            line += " (you)";
                        }
                        lines.Add(line);
                    }
                }

                renderer.AddTextLines(lines, new Vec2(.01f, .15f), HorizontalAlign.Left, VerticalAlign.Top,
                                      0, new ColorValue(1, 1, 0));
            }

            //screenMessages
            {
                Vec2 pos = new Vec2(.01f, .9f);
                for (int n = screenMessages.Count - 1; n >= 0; n--)
                {
                    ScreenMessage message = screenMessages[n];

                    ColorValue color = new ColorValue(1, 1, 1, message.timeRemaining);
                    if (color.Alpha > 1)
                    {
                        color.Alpha = 1;
                    }

                    renderer.AddText(message.text, pos, HorizontalAlign.Left, VerticalAlign.Top,
                                     color);
                    pos.Y -= renderer.DefaultFont.Height;
                }
            }

            //Game is paused on server
            if (EntitySystemWorld.Instance.IsClientOnly() && !EntitySystemWorld.Instance.Simulation)
            {
                renderer.AddText("Game is paused on server", new Vec2(.5f, .5f),
                                 HorizontalAlign.Center, VerticalAlign.Center, new ColorValue(1, 0, 0));
            }
        }
示例#6
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnTick()"/>.</summary>
        protected override void OnTick()
        {
            base.OnTick();

            //single mode. recreate player units if need
            if (EntitySystemWorld.Instance.IsSingle())
            {
                if (GameMap.Instance.GameType == GameMap.GameTypes.Action ||
                    GameMap.Instance.GameType == GameMap.GameTypes.TPSArcade ||
                    GameMap.Instance.GameType == GameMap.GameTypes.TurretDemo ||
                    GameMap.Instance.GameType == GameMap.GameTypes.VillageDemo ||
                    GameMap.Instance.GameType == GameMap.GameTypes.PlatformerDemo ||
                    GameMap.Instance.GameType == GameMap.GameTypes.AssaultKnights)
                {
                    if (PlayerManager.Instance != null)
                    {
                        foreach (PlayerManager.ServerOrSingle_Player player in
                                 PlayerManager.Instance.ServerOrSingle_Players)
                        {
                            if (player.Intellect == null || player.Intellect.ControlledObject == null)
                            {
                                ServerOrSingle_CreatePlayerUnit(player);
                            }
                        }
                    }
                }
            }

            //networking mode
            if (EntitySystemWorld.Instance.IsServer())
            {
                if (GameMap.Instance.GameType == GameMap.GameTypes.Action ||
                    GameMap.Instance.GameType == GameMap.GameTypes.TPSArcade ||
                    GameMap.Instance.GameType == GameMap.GameTypes.TurretDemo ||
                    GameMap.Instance.GameType == GameMap.GameTypes.VillageDemo ||
                    GameMap.Instance.GameType == GameMap.GameTypes.PlatformerDemo ||
                    GameMap.Instance.GameType == GameMap.GameTypes.AssaultKnights) //iNCIN -- OK NOW
                {
                    if (PlayerManager.Instance != null)
                    {
                        UserManagementServerNetworkService userManagementService =
                            GameNetworkServer.Instance.UserManagementService;

                        //remove users
again:
                        foreach (PlayerManager.ServerOrSingle_Player player in
                                 PlayerManager.Instance.ServerOrSingle_Players)
                        {
                            if (player.User != null && player.User != userManagementService.ServerUser)
                            {
                                NetworkNode.ConnectedNode connectedNode = player.User.ConnectedNode;
                                if (connectedNode == null ||
                                    connectedNode.Status != NetworkConnectionStatuses.Connected)
                                {
                                    if (player.Intellect != null)
                                    {
                                        PlayerIntellect playerIntellect = player.Intellect as PlayerIntellect;
                                        if (playerIntellect != null)
                                        {
                                            playerIntellect.TryToRestoreMainControlledUnit();
                                        }

                                        if (player.Intellect.ControlledObject != null)
                                        {
                                            player.Intellect.ControlledObject.Die();
                                        }
                                        player.Intellect.SetForDeletion(true);
                                        player.Intellect = null;
                                    }

                                    PlayerManager.Instance.ServerOrSingle_RemovePlayer(player);

                                    goto again;
                                }
                            }
                        }

                        //add users
                        foreach (UserManagementServerNetworkService.UserInfo user in
                                 userManagementService.Users)
                        {
                            //check whether "EntitySystem" service on the client
                            if (user.ConnectedNode != null)
                            {
                                if (!user.ConnectedNode.RemoteServices.Contains("EntitySystem"))
                                {
                                    continue;
                                }
                            }

                            PlayerManager.ServerOrSingle_Player player = PlayerManager.Instance.
                                                                         ServerOrSingle_GetPlayer(user);

                            if (player == null)
                            {
                                player = PlayerManager.Instance.Server_AddClientPlayer(user);

                                PlayerIntellect intellect = (PlayerIntellect)Entities.Instance.
                                                            Create("PlayerIntellect", World.Instance);
                                intellect.PostCreate();

                                player.Intellect = intellect;

                                if (GameNetworkServer.Instance.UserManagementService.ServerUser != user)
                                {
                                    //player on client
                                    RemoteEntityWorld remoteEntityWorld = GameNetworkServer.Instance.
                                                                          EntitySystemService.GetRemoteEntityWorld(user);
                                    intellect.Server_SendSetInstanceToClient(remoteEntityWorld);
                                }
                                else
                                {
                                    //player on this server
                                    PlayerIntellect.SetInstance(intellect);
                                }

                                //player.Intellect = intellect;
                                if (player.User.Faction == null)
                                {
                                    return;
                                }
                                FactionType f = (FactionType)EntityTypes.Instance.GetByName(player.User.Faction);
                                player.Intellect.Faction = f;
                            }
                        }

                        //create units
                        foreach (PlayerManager.ServerOrSingle_Player player in
                                 PlayerManager.Instance.ServerOrSingle_Players)
                        {
                            if (player.Intellect != null && player.Intellect.ControlledObject == null)
                            {
                                if (GameMap.Instance.GameType == GameMap.GameTypes.AssaultKnights)
                                {
                                    ServerOrSingle_CreatePlayerUnit(player);
                                }
                                else
                                {
                                    ServerOrSingle_CreatePlayerUnit(player);
                                }
                            }
                        }
                    }
                }
            }
        }