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); }
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. }
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()); } }