public void Message_PlayerUpdateReceived(PlayerUpdateMessage message) { if(message.Action == PlayerUpdateAction.Add) { PokePlayer player = new PokePlayer(); player.ID = message.NetworkID; player.IsLoaded = false; this.network.AddPlayer(message.NetworkID, player); PlayerRequestMessage msg = new PlayerRequestMessage () { RequestedPlayerNetworkID = message.NetworkID }; this.network.Send(msg); } else { this.network.RemovePlayer(message.NetworkID); } }
private void UpdateRanges() { while(this.Started) { var result = this.players.UpdateRanges (); foreach(var player in result) { foreach(var playerchange in player.Value) { if(playerchange.State == RangeChangeStates.Add) { PlayerUpdateMessage updmsg = new PlayerUpdateMessage () { NetworkID = playerchange.Player.NetworkID, Action = PlayerUpdateAction.Add, CharacterName = playerchange.Player.Character.Name, }; player.Key.Connection.Send (updmsg); } else { PlayerUpdateMessage updmsg = new PlayerUpdateMessage () { NetworkID = playerchange.Player.NetworkID, Action = PlayerUpdateAction.Remove, CharacterName = playerchange.Player.Character.Name, }; player.Key.Connection.Send (updmsg); } } } Thread.Sleep (this.RangeUpdateFrequency); } }
private void LoginRequestReceived(MessageReceivedEventArgs ev) { var msg = (LoginMessage)ev.Message; ISession session = this.sessionfactory.OpenSession (); Account account = session.CreateCriteria<Account>() .Add(Restrictions.InsensitiveLike("Username", msg.Username )) .Add(Restrictions.Eq("Password", msg.Password )) .List<Account>().FirstOrDefault(); if (account == null || this.players.ContainsPlayer((uint)account.ID)) { ev.Connection.Send (new LoginFailedMessage (ConnectionRejectedReason.BadLogin)); return; } Character character = session.CreateCriteria<Character> () .Add(Restrictions.Eq("AccountID", account.ID)) .List<Character>().FirstOrDefault(); character.Location = new ScreenPoint(character.MapX * 32, character.MapY * 32); character.Animation = Enum.GetName (typeof(Directions), character.Direction); character.NextMoveActive = true; // Create player NetworkPlayer player = new NetworkPlayer(); player.Character = character; player.AccountID = account.ID; //player.NetworkID = ++networkid; player.NetworkID = (uint) account.ID; player.Character.NetworkID = player.NetworkID; player.Connection = ev.Connection; player.Character.MapChunkName = this.GetChunkName(player.Character.WorldName, player.Character.MapLocation); player.State = PlayerState.LoggedIn; // Add to the list of players in the servers memory this.players.AddPlayer(player); // Send them authentication ID player.Connection.Send(new LoginSuccessMessage () { NetworkIDAssigned = player.NetworkID }); var handler = this.UserLoggedIn; if(handler != null) handler(this, new UserEventArgs(player)); // Update other players var updatemsg = new PlayerUpdateMessage () { CharacterName = player.Character.Name, NetworkID = player.NetworkID, Action = PlayerUpdateAction.Add }; foreach (var tmp in this.players.GetPlayers()) tmp.Connection.Send(updatemsg); session.Close (); }
public void Disconnect(IConnection connection) { connection.MessageReceived -= this.Server_MessageReceived; connection.Disconnected -= this.Server_Disconnected; if(connection.IsConnected) connection.Disconnect(); NetworkPlayer player = this.players.GetPlayer(connection); PlayerUpdateMessage updatemsg = new PlayerUpdateMessage(); updatemsg.Action = PlayerUpdateAction.Remove; updatemsg.NetworkID = player.NetworkID; lock(this.players.PlayerLock) { foreach(var nplayer in this.players.PlayerRanges[player.NetworkID]) nplayer.Connection.Send (updatemsg); } this.players.RemovePlayer (connection); this.SaveCharacter(player.Character); // fire logged out event var handler = this.UserLoggedOut; if(handler != null) handler (this, new UserEventArgs (player)); }