Пример #1
0
        private void Main()
        {
            using (Connection = new System.Net.Sockets.TcpClient())
            {
                try
                {
                    Connection.Connect(Server.Address, Server.Port);
                    Blowfish = new Library.BlowfishEngine(Server.Token);
                    State    = State.Load;

                    BinaryReader br = new BinaryReader(Connection.GetStream());
                    for (int n = 0; State == State.Load; n++)
                    {
                        int    size   = br.ReadInt16();
                        byte[] buffer = br.ReadBytes(size - 2);

                        if (size > 2)
                        {
                            if (n > 0)                             //ToDo encrypt = true, false
                            {
                                buffer = Blowfish.Decrypt(buffer);
                            }

                            Logger.Trace("Server packet: " + Packet.Utils.prettyHex(buffer));

                            switch (buffer[0])
                            {
                            case 0x00:
                                _onInit(buffer);
                                break;

                            case 0x01:
                                _onLoginFail(buffer);
                                State = State.Init;
                                break;

                            case 0x03:
                                _onLoginOk(buffer);
                                break;

                            case 0x04:
                                _onServerList(buffer);
                                break;

                            case 0x06:
                                _onPlayFail(buffer);
                                State = State.Init;
                                break;

                            case 0x07:
                                _onPlayOk(buffer);
                                State = State.Last;
                                break;

                            case 0x0B:
                                //gameguard check verified from server
                                _onGameGuardReply(buffer);
                                break;
                            }
                        }
                        else if (size < 2)
                        {
                            throw new EndOfStreamException();
                        }
                    }

                    if (State == State.Last)
                    {
                        if (ServerSelected != null)
                        {
                            ServerSelected(LoginKey, GameKey);
                        }
                    }
                    else
                    {
                        Logger.Fatal("State fail");
                    }
                }
                catch (System.Net.Sockets.SocketException e)
                {
                    Logger.Error(e.Message);
                }
                catch (Exception e)
                {
                    Logger.Fatal(e.ToString());
                }
                finally
                {
                    Connection.Close();
                }
            }
        }
Пример #2
0
		private void Main()
		{
			using (Connection = new System.Net.Sockets.TcpClient())
			{
				try
				{
					Connection.Connect(Server.Address, Server.Port);
					Blowfish = new Library.BlowfishEngine(Server.Token);
					State = State.Load;

					BinaryReader br = new BinaryReader(Connection.GetStream());
					for (int n = 0; State == State.Load; n++)
					{
						int size = br.ReadInt16();
						byte[] buffer = br.ReadBytes(size - 2);

						if (size > 2)
						{
							if (n > 0) //ToDo encrypt = true, false
								buffer = Blowfish.Decrypt(buffer);

							Logger.Trace("Server packet: " + Packet.Utils.prettyHex(buffer));

							switch (buffer[0])
							{
								case 0x00:
									_onInit(buffer);
									break;
								case 0x01:
									_onLoginFail(buffer);
									State = State.Init;
									break;
								case 0x03:
									_onLoginOk(buffer);
									break;
								case 0x04:
									_onServerList(buffer);
									break;
								case 0x06:
									_onPlayFail(buffer);
									State = State.Init;
									break;
								case 0x07:
									_onPlayOk(buffer);
									State = State.Last;
									break;
								case 0x0B:
									//gameguard check verified from server
									_onGameGuardReply(buffer);
									break;
							}
						}
						else if (size < 2)
							throw new EndOfStreamException();
					}

					if (State == State.Last)
					{
						if (ServerSelected != null)
							ServerSelected(LoginKey, GameKey);
					}
					else
					{
						Logger.Fatal("State fail");
					}
				}
				catch (System.Net.Sockets.SocketException e)
				{
					Logger.Error(e.Message);
				}
				catch (Exception e)
				{
					Logger.Fatal(e.ToString());
				}
				finally
				{
					Connection.Close();
				}
			}
		}