private void SendPlayerList(PlayerConnection connection)
        {
            var players     = playerProvider.GetPlayers(connection.User).ToArray();
            var appearances = players.Select(x => gameData.GetAppearance(x.AppearanceId)).ToArray();

            connection.Send(UserPlayerList.Create(gameData, players, appearances), SendOption.Reliable);
        }
Exemple #2
0
 public void SendToEditor(System.Guid msgId, byte[] data)
 {
     if (playerConnection.isConnected)
     {
         playerConnection.Send(msgId, data);
     }
 }
 private void SendFailedLoginResult(PlayerConnection connection, AuthResult result)
 {
     connection.Send(new BotAuthResponse()
     {
         Status      = (int)result,
         SessionKeys = new byte[0]
     }, SendOption.Reliable);
 }
 private void SendSuccessLoginResult(PlayerConnection connection)
 {
     connection.Send(new AuthResponse()
     {
         Status      = 0,
         SessionKeys = new byte[4] {
             1, 2, 3, 4
         }
     }, SendOption.Reliable);
 }
        protected override void Handle(AuthRequest data, PlayerConnection connection)
        {
#if DEBUG
            logger.LogDebug("Auth Request received. User: "******", Pass: "******", ClientVersion: " + data.ClientVersion);
#endif

            var user = userManager.Get(data.Username);
            if (user == null)
            {
#warning a user should not be created here.
                user = userManager.Create(data.Username, null, null, data.Password);
            }

            var result = authService.Authenticate(user, data.Password);

#if DEBUG
            logger.LogDebug("Sending Auth Response: " + (int)result);
#endif

            if (result != AuthResult.Success)
            {
                connection.Send(new AuthResponse()
                {
                    Status = (int)result, SessionKeys = new byte[0]
                }, SendOption.Reliable);
                return;
            }

            // check if we already have a connection with the same user
            // and kick that user out if so by disconnecting that connection.
            var activeConnection = connectionProvider.GetConnection <PlayerConnection>(x => x.User?.Id == user.Id);
            if (activeConnection != null)
            {
                connectionProvider.Terminate(activeConnection, ConnectionKillSwitch.MultipleLocations);
            }

            connection.UserTag = user;

            // authenticated
            // send auth response
            SendSuccessLoginResult(connection);

            // then send player list
            SendPlayerList(connection);

            // when player has been selected do the following
            //connection.PlayerTag = playerProvider.Get(data.Username);
            //worldProcessor.AddPlayer(connection);
            // SEE: UserPlayerSelectHandler, logic moved there.
        }
Exemple #6
0
        private void OnEditorMessageReceived(MessageEventArgs args)
        {
            var            msgReceived       = args.data.Deserialize <ECMBase>();
            var            msgRespondingList = new List <ECMBase>();
            MessageHandler mh;

            if (onEditorMessageReceived.TryGetValue(msgReceived.ID, out mh))
            {
                mh(args.data, msgRespondingList);
            }
            if (playerConnection.isConnected)
            {
                foreach (var r in msgRespondingList)
                {
                    playerConnection.Send(EditorConnectionMessageID.Player, r.SerializeToByteArray());
                }
            }
        }
 static public void SendArray <T>(this PlayerConnection connection, Guid msgGuid, NativeArray <T> data) where T : unmanaged
 {
     connection.Send(msgGuid, SerializeUnmanagedArray(data));
 }
 static public void Send <T>(this PlayerConnection connection, Guid msgGuid, T data) where T : unmanaged
 {
     connection.Send(msgGuid, SerializeUnmanaged(ref data));
 }
        public void LinkToGameSession(string sessionKey, PlayerConnection myConnection)
        {
            try
            {
                var session = sessions.GetOrCreate(sessionKey);

                session.AddPlayer(myConnection);

                if (!session.IsOpenWorldSession && session.Bot == null)
                {
                    var bot = botManager.GetMostAvailable();
                    if (bot != null)
                    {
                        session.AssignBot(bot);
                    }
                }

                var allPlayers  = session.Players.GetAll();
                var connections = connectionProvider.GetConnectedActivePlayerConnections(session);

                var objects = session.Objects.GetAll();
                var npcs    = session.Npcs.GetAll();

                var myInventory = playerInventoryProvider.GetInventory(myConnection.Player.Id);

                foreach (var connection in connections)
                {
                    var isMe = connection.InstanceID == myConnection.InstanceID;
                    if (isMe)
                    {
                        connection.Send(MyPlayerAdd.Create(gameData, myConnection.Player, myInventory.Items), SendOption.Reliable);
                        //connection.Send(PlayerInventory.Create(myConnection.Player, inventory.Items), SendOption.Reliable);
                    }
                    else
                    {
                        connection.Send(PlayerAdd.Create(gameData, myConnection.Player), SendOption.Reliable);
                    }
                }

                foreach (var player in allPlayers)
                {
                    if (player.Id == myConnection.Player.Id)
                    {
                        continue;
                    }
                    myConnection.Send(PlayerAdd.Create(gameData, player), SendOption.Reliable);
                }

                foreach (var obj in objects)
                {
                    var gobj      = gameData.GetGameObject(obj.ObjectId);
                    var transform = gameData.GetTransform(gobj.TransformId);
                    if (gobj.Static)
                    {
                        if (obj.Type != gobj.Type)
                        {
                            myConnection.Send(ObjectUpdate.Create(obj, transform, gobj.Static), SendOption.Reliable);
                        }
                    }
                    else
                    {
                        myConnection.Send(ObjectAdd.Create(obj, transform), SendOption.Reliable);
                    }
                }

                foreach (var npc in npcs)
                {
                    var transform = gameData.GetTransform(npc.TransformId);
                    myConnection.Send(NpcAdd.Create(gameData, npc, transform), SendOption.Reliable);
                }
            }
            catch (Exception exc)
            {
                logger.LogInformation(exc.ToString());
            }
        }