示例#1
0
 public void StopListen(bool terminate = false)
 {
     if (terminate)
     {
         NetworkClientEventArgs args = new NetworkClientEventArgs();
         args.CState = NetworkClientEventArgs.Callback.NETWORK_CLIENT_STOP;
         OnEvent(args);
     }
     base.StopListen();
 }
示例#2
0
        void CryptoKeyResult(Socket client, byte[] pMsg)
        {
            _cryptyKeyInformLocl = BinaryStructConverter.FromByteArray <_crypty_key_inform_locl>(pMsg);
            NetworkClientEventArgs args = new NetworkClientEventArgs();

            args.AccountSerial = 0;
            args.Servers       = null;
            args.DefaultSet    = new Default_Set();
            args.SConnection   = client;
            args.CState        = NetworkClientEventArgs.Callback.CRYPTO_KEY_INFORM;
            OnEvent(args);
        }
示例#3
0
        void AfterLogin(Socket client, byte[] pMsg)
        {
            _login_account_result_locl loginAccountResultLocl = BinaryStructConverter.FromByteArray <_login_account_result_locl>(pMsg);

            // Fill in default set //
            _defaulSet.account_serial = loginAccountResultLocl.dwAccountSerial;
            _defaulSet.is_premium     = loginAccountResultLocl.dwBillingType > 1 ? 0 : (uint)1;

            // EventArgs for callback
            NetworkClientEventArgs args = new NetworkClientEventArgs();

            args.AccountSerial = loginAccountResultLocl.dwAccountSerial;
            args.Servers       = null;
            args.DefaultSet    = _defaulSet;
            args.SConnection   = client;

            switch (loginAccountResultLocl.byRetCode)
            {
            case 0x00:     // OK
                args.CState = NetworkClientEventArgs.Callback.NULL;
                WorldListRequest(client);
                break;

            case 48:       // Server CLOSE
                args.CState = NetworkClientEventArgs.Callback.LOGIN_ACCOUNT_SERVER_CLOSED;
                break;

            case 0x05:     // Account allready in game
                args.CState = NetworkClientEventArgs.Callback.LOGIN_ACCOUNT_ALREADY_IN_GAME;
                break;

            case 0x06:     // Login Wrong
                args.CState = NetworkClientEventArgs.Callback.LOGIN_ACCOUNT_WRONG_LOGIN;
                break;

            case 0x07:     // PW Wrong
                args.CState = NetworkClientEventArgs.Callback.LOGIN_ACCOUNT_WRONG_PW;
                break;

            case 0x28:     // Account BLOCK
                args.CState       = NetworkClientEventArgs.Callback.LOGIN_ACCOUNT_BANNED;
                args.ZBlockReason = loginAccountResultLocl.uszBlockReason;
                StopListen(true);
                break;

            default:
                args.CState = NetworkClientEventArgs.Callback.NULL;
                break;
            }

            OnEvent(args);
        }
示例#4
0
        private void SelectWorldResult(Socket client, byte[] pMsg)
        {
            _select_world_result_locl selectWorldResult = BinaryStructConverter.FromByteArray <_select_world_result_locl>(pMsg);

            if (selectWorldResult.byRetCode == 0)
            {
                // Fill in last data to defaultSet
                var serverCfg = LauncherConfig.GetInstance.ServerConfig;
                if (serverCfg.OverrideServerAddress)
                {
                    _defaulSet.world_ipv4 = (uint)IPAddress.Parse(serverCfg.ServerAddress.Split(':')[0]).Address;
                    _defaulSet.world_port = ushort.Parse(serverCfg.ServerAddress.Split(':')[1]);
                }
                else
                {
                    _defaulSet.world_ipv4 = selectWorldResult.dwWorldGateIP;
                    _defaulSet.world_port = selectWorldResult.wWorldGatePort;
                }

                _defaulSet.world_master_key = new uint[4];
                for (int i = 0; i < 4; i++)
                {
                    _defaulSet.world_master_key[i] = selectWorldResult.dwWorldMasterKey[i];
                }
                _defaulSet.allow_alt_tab = selectWorldResult.bAllowAltTab;
                _defaulSet.reserved      = 0;
                var nationCfg = LauncherConfig.GetInstance.NationalConfig;
                if (nationCfg.OverrideNationalCode)
                {
                    _defaulSet.nation_code = (ushort)nationCfg.NationCode;
                }
                else
                {
                    _defaulSet.nation_code = (ushort)e_nation_code.ru_ru;
                }
                StopListen(true);

                NetworkClientEventArgs args = new NetworkClientEventArgs();
                args.Servers     = _serverList;
                args.DefaultSet  = _defaulSet;
                args.CState      = NetworkClientEventArgs.Callback.SERVER_SESSION_RESULT;
                args.SConnection = client;
                OnEvent(args);
            }
        }
示例#5
0
        private void WorldListInform(Socket client, byte[] pMsg)
        {
            _world_user_inform_locl worldUserInform = BinaryStructConverter.FromByteArray <_world_user_inform_locl>(pMsg);

            for (int i = 0; i < worldUserInform.byServiceWorldNum; i++)
            {
                ServerState state = _serverList[i];
                state.i_ServerLoad = worldUserInform.wUserNum[i];
            }

            NetworkClientEventArgs args = new NetworkClientEventArgs();

            args.Servers     = _serverList;
            args.DefaultSet  = _defaulSet;
            args.CState      = NetworkClientEventArgs.Callback.SERVER_LIST_INFORM;
            args.SConnection = client;
            OnEvent(args);
        }
示例#6
0
 protected virtual void OnEvent(NetworkClientEventArgs e)
 {
     ClientEvents?.Invoke(this, e);
 }