// 캐릭터 정보 패킷 획득 함수 public void OnReceiveCharacterPacket(PacketId id, byte[] data) { CharacterPacket packet = new CharacterPacket(data); CharacterData character = packet.GetPacket(); // Debug.Log(character.ToString() + " 수신완료."); //remotePlayers[character.playerIndex] = character; }
public override void Handle(EzClient client, EzPacket packet) { string characterName = packet.Data.ReadCString(Utils.KoreanEncoding); _logger.Debug("Character Name: {0}", characterName); Character existing = Server.Database.SelectCharacter(characterName); if (existing == null) { client.Session.Character = new Character(characterName); if (!Server.Database.UpsertCharacter(client.Session.Character, client.Account.Id)) { _logger.Error("Failed to save newly created character."); } IBuffer characterPacket = CharacterPacket.Create(client); Send(client, 2, characterPacket); } else { _logger.Error("Character with name ({0}) already exists", characterName); IBuffer error = EzServer.Buffer.Provide(); error.WriteByte(1); Send(client, 2, error); } }
public ServerCharacter(string name, NetPeer peer, Vector2 position) : base(peer.Id, name) { Peer = peer; Peer.Tag = this; CharacterPacket = new CharacterPacket { Id = (byte)peer.Id }; _variableData.Position = position; }
// 주기적으로 local character data를 송신한다. private IEnumerator SendLocalCharacterInfo() { // while(newtworkmanager.isconnected()) while (true) { for (int i = 0; i < 3; i++) { CharacterPacket packet = new CharacterPacket(localPlayers[i]); // UDP로 전송 networkManager.SendUnreliable <CharacterData>(packet); // TCP로 전송 //networkManager.SendReliable<CharacterData>(packet); } //Debug.Log("캐릭터 데이터 송신 완료"); // 0.2초마다 데이터 송신 yield return(new WaitForSeconds(0.2f)); } }
public override void Handle(EzClient client, EzPacket packet) { byte[] paramOne = packet.Data.ReadBytes(17); byte[] paramTwo = packet.Data.ReadBytes(17); byte[] unknown = packet.Data.ReadBytes(4); byte[] paramThree = packet.Data.ReadBytes(35); byte[] paramVersion = packet.Data.ReadBytes(4); byte[] unknown1 = packet.Data.ReadBytes(7); byte[] paramFour = packet.Data.ReadBytes(4); // Last parameter, 4 numbers [0000 - 9999] byte[] unknown2 = packet.Data.ReadBytes(16); byte[] paramOneDecrypt = Utils.DecryptParameter(paramOne, Utils.KeyFirstParameter); byte[] paramTwoDecrypt = Utils.DecryptParameter(paramTwo, Utils.KeySecondParameter); string sessionKey = Utils.ParameterToString(paramOneDecrypt); string accountName = Utils.ParameterToString(paramTwoDecrypt); string password = Utils.ParameterToString(paramThree); string four = Utils.ParameterToString(paramFour); string version = Utils.ParameterToString(paramVersion); Session session; if (Server.Settings.ApiSettings.NeedRegistration) { session = Server.SessionManager.GetSession(sessionKey); if (session == null) { _logger.Info("Invalid session key ({0}) provided by client ({1})", sessionKey, client.Identity); client.Socket.Close(); return; } if (session.Account.Name != accountName) { _logger.Info("Account ({0}) doesn't match session {{1}) for client ({2})", accountName, session.Account, client.Identity); client.Socket.Close(); return; } if (!BCrypt.Net.BCrypt.Verify(password, session.Account.Hash)) { _logger.Info("Hash ({0}) doesn't match session {{1}) for client ({2})", password, session.Account.Hash, client.Identity); client.Socket.Close(); return; } } else { Account account = Server.Database.SelectAccount(accountName); if (account == null) { string bCryptHash = BCrypt.Net.BCrypt.HashPassword(password, ApiSettings.BCryptWorkFactor); account = Server.Database.CreateAccount(accountName, bCryptHash); } else if (!BCrypt.Net.BCrypt.Verify(password, account.Hash)) { _logger.Info("Wrong password for account: {0}", accountName); client.Socket.Close(); return; } session = new Session(sessionKey, account); Server.SessionManager.StoreSession(session); _logger.Info("Created session ({0}) for {0} ", session.Key, session.Account); } session.Character = Database.SelectCharacter(session.Account.Id); session.Setting = Database.SelectSetting(session.Account.Id); session.Inventory = new Inventory(Database.SelectInventoryItems(session.Account.Id)); if (session.Setting == null) { session.Setting = new Setting(); if (!Server.Database.UpsertSetting(session.Setting, session.Account.Id)) { _logger.Error("Failed to save newly created setting."); } } client.Session = session; // TODO implement login protection client.Session.IsLoggedIn = true; _logger.Debug("Client {0} Login (params: sessionKey:{1} account:{2} hash:{3} Four:{4}) Version:{5}", client.Identity, sessionKey, accountName, password, four, version); IBuffer response = EzServer.Buffer.Provide(); response.WriteByte(1); // 0 = NonBlocking // 1 = Blocking? response.WriteByte(0); response.WriteByte(0); response.WriteByte(0x14); Send(client, 0, response); IBuffer characterPacket = CharacterPacket.Create(client); Send(client, 1, characterPacket); }