예제 #1
0
        public override void run()
        {
            if (getClient().login1 != login1 && getClient().login2 != login2)
            {
                getClient().sendPacket(new LoginFail(getClient(), LoginFail.LoginFailReason.REASON_ACCESS_FAILED));
                return;
            }

            L2Server server = ServerThreadPool.getInstance().get(serverId);

            if (server == null)
            {
                getClient().sendPacket(new LoginFail(getClient(), LoginFail.LoginFailReason.REASON_ACCESS_FAILED));
                return;
            }

            if (server.connected == 0)
            {
                getClient().sendPacket(new LoginFail(getClient(), LoginFail.LoginFailReason.REASON_SERVER_MAINTENANCE));
            }
            else
            {
                ServerThreadPool.getInstance().SendPlayer(serverId, getClient(), DateTime.Now.ToLocalTime().ToString());

                //login updates here

                getClient().sendPacket(new PlayOk(getClient()));
            }
        }
예제 #2
0
        public override void run()
        {
            L2Server server = null;

            foreach (L2Server srv in ServerThreadPool.getInstance().servers)
            {
                if (srv.code == code)
                {
                    srv.thread = thread;
                    server     = srv;
                    break;
                }
            }

            if (server == null)
            {
                CLogger.error("code '" + code + "' for server was not found. closing");
                thread.close(new ServerLoginFail("wrong code"));
                return;
            }

            thread.id        = server.id;
            thread.info      = info;
            thread.wan       = host;
            thread.port      = port;
            thread.maxp      = maxp;
            thread.gmonly    = gmonly == 1;
            thread.testMode  = test == 1;
            thread.connected = true;

            thread.sendPacket(new ServerLoginOk());
            CLogger.extra_info("AuthThread: Server #" + server.id + " connected");
        }
예제 #3
0
        public async void Start()
        {
            Config.Config    config           = ServiceProvider.GetService <Config.Config>();
            ServerThreadPool serverThreadPool = ServiceProvider.GetService <ServerThreadPool>();

            await config.Initialise();

            await ServiceProvider.GetService <PreReqValidation>().Initialise();

            await ServiceProvider.GetService <Managers.ClientManager>().Initialise();

            await serverThreadPool.Initialize();

            NetworkRedirect.Instance.Initialize();

            _listener = new TcpListener(IPAddress.Parse(config.ServerConfig.Host), config.ServerConfig.LoginPort);

            try
            {
                _listener.Start();
            }
            catch (SocketException ex)
            {
                Log.Error($"Socket Error: '{ex.SocketErrorCode}'. Message: '{ex.Message}' (Error Code: '{ex.NativeErrorCode}')");
                Log.Info("Press ENTER to exit...");
                Console.Read();
                Environment.Exit(0);
            }

            Log.Info($"Auth server listening clients at {config.ServerConfig.Host}:{config.ServerConfig.LoginPort}");

            Task.Factory.StartNew(serverThreadPool.Start);

            WaitForClients();
        }
예제 #4
0
 public RequestAuthLogin(IServiceProvider serviceProvider, Packet p, LoginClient client) : base(serviceProvider)
 {
     _accountService = serviceProvider.GetService <IAccountService>();
     _client         = client;
     _config         = serviceProvider.GetService <Config.Config>();
     _serverThread   = serviceProvider.GetService <ServerThreadPool>();
     Raw             = p.ReadByteArrayAlt(128);
 }
예제 #5
0
        public void Start()
        {
            Console.Title = "L2dotNET Loginserver";
            Cfg.load();
            ClientManager.Instance.Initialize();

            ServerThreadPool.getInstance();
            NetworkRedirect.getInstance();

            LoginListener = new TcpListener(IPAddress.Parse(Cfg.SERVER_HOST), Cfg.SERVER_PORT);
            LoginListener.Start();
            CLogger.extra_info("Auth server listening clients at " + Cfg.SERVER_HOST + ":" + Cfg.SERVER_PORT);
            new System.Threading.Thread(ServerThreadPool.getInstance().start).Start();
            TcpClient clientSocket = default(TcpClient);

            while (true)
            {
                clientSocket = LoginListener.AcceptTcpClient();
                AcceptClient(clientSocket);
            }
        }
예제 #6
0
        public override void run()
        {
            string username, password;

            CipherParameters key = getClient().RsaPair._privateKey;
            RSAEngine        rsa = new RSAEngine();

            rsa.init(false, key);

            byte[] decrypt = rsa.processBlock(_raw, 0, 128);

            if (decrypt.Length < 128)
            {
                byte[] temp = new byte[128];
                Array.Copy(decrypt, 0, temp, 128 - decrypt.Length, decrypt.Length);
                decrypt = temp;
            }

            username = Encoding.ASCII.GetString(decrypt, 0x5e, 14).Replace("\0", "");
            password = Encoding.ASCII.GetString(decrypt, 0x6c, 16).Replace("\0", "");

            AccountModel account = accountService.GetAccountByLogin(username);

            if (account == null)
            {
                if (Cfg.AUTO_ACCOUNTS)
                {
                    account = accountService.CreateAccount(username, L2Security.HashPassword(password));
                }
                else
                {
                    getClient().sendPacket(new LoginFail(getClient(), LoginFail.LoginFailReason.REASON_USER_OR_PASS_WRONG));
                    getClient().close();
                    return;
                }
            }
            else
            {
                if (!accountService.CheckIfAccountIsCorrect(username, L2Security.HashPassword(password)))
                {
                    getClient().sendPacket(new LoginFail(getClient(), LoginFail.LoginFailReason.REASON_USER_OR_PASS_WRONG));
                    getClient().close();
                    return;
                }

                if (ServerThreadPool.getInstance().LoggedAlready(username.ToLower()))
                {
                    getClient().sendPacket(new LoginFail(getClient(), LoginFail.LoginFailReason.REASON_ACCOUNT_IN_USE));
                    getClient().close();
                    return;
                }
            }

            Random rnd = new Random();

            getClient().activeAccount = account;
            getClient().setLoginPair(rnd.Next(), rnd.Next());
            getClient().setPlayPair(rnd.Next(), rnd.Next());

            getClient().sendPacket(new LoginOk(getClient()));
        }
예제 #7
0
 public ServerList(LoginClient Client)
 {
     base.makeme(Client);
     servers = ServerThreadPool.getInstance().servers;
 }