protected override void Initialize(params object[] args) { using (Packet outPacket = new Packet(InteroperabilityOperationCode.RegistrationRequest)) { outPacket.WriteString((string)args[0]); outPacket.WriteByte((byte)args[1]); outPacket.WriteBytes(ChannelServer.RemoteEndPoint.Address.GetAddressBytes()); outPacket.WriteShort((short)ChannelServer.RemoteEndPoint.Port); this.Send(outPacket); } ByteBuffer buffer = new ByteBuffer(); this.Socket.BeginReceive(buffer.Array, buffer.Position, buffer.Capacity, SocketFlags.None, new AsyncCallback(this.OnReceive), buffer); this.ResponseReceived.WaitOne(); using (Packet inPacket = this.ResponsePacket) { ChannelRegistrationResponse outPacket = (ChannelRegistrationResponse)inPacket.ReadByte(); switch (outPacket) { case ChannelRegistrationResponse.Valid: ChannelServer.ExperienceRate = inPacket.ReadInt(); ChannelServer.QuestExperienceRate = inPacket.ReadInt(); ChannelServer.PartyQuestExperienceRate = inPacket.ReadInt(); ChannelServer.MesoRate = inPacket.ReadInt(); ChannelServer.DropRate = inPacket.ReadInt(); ChannelServer.WorldID = inPacket.ReadByte(); ChannelServer.ChannelID = inPacket.ReadByte(); Log.Success("Registered channel as {0}-{1} at {2}.", WorldNameResolver.GetName(ChannelServer.WorldID), ChannelServer.ChannelID, ChannelServer.RemoteEndPoint); Log.Inform("Rates: {0}x / {1}x / {2}x / {3}x / {4}x.", ChannelServer.ExperienceRate, ChannelServer.QuestExperienceRate, ChannelServer.PartyQuestExperienceRate, ChannelServer.MesoRate, ChannelServer.DropRate); break; default: throw new NetworkException(RegistrationResponseResolver.Explain(outPacket)); } } }
private void OnRegistrationResponse(InPacket inPacket) { ServerRegistrationResponse response = (ServerRegistrationResponse)inPacket.ReadByte(); switch (response) { case ServerRegistrationResponse.Valid: { GameServer.WorldID = inPacket.ReadByte(); GameServer.ChannelID = inPacket.ReadByte(); GameServer.ScrollingHeader = inPacket.ReadString(); GameServer.Rates = new Rates() { Experience = inPacket.ReadInt(), QuestExperience = inPacket.ReadInt(), PartyQuestExperience = inPacket.ReadInt(), Meso = inPacket.ReadInt(), Loot = inPacket.ReadInt(), }; Log.Success("Registered Game as {0}-{1} at {2}.", WorldNameResolver.GetName(GameServer.WorldID), GameServer.ChannelID, GameServer.RemoteEndPoint); Log.Inform("Rates: {0}x / {1}x / {2}x / {3}x / {4}x.", GameServer.Rates.Experience, GameServer.Rates.QuestExperience, GameServer.Rates.PartyQuestExperience, GameServer.Rates.Meso, GameServer.Rates.Loot); } break; default: throw new NetworkException(RegistrationResponseResolver.Explain(response)); } }