Exemplo n.º 1
0
        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));
			}
		}