コード例 #1
0
        public static void HandlePacketLoginRequest(Client client, LoginRequestPacket packet)
        {
            if (!client.CheckUsername(packet.Username))
            {
                client.Kick("Inconsistent username");
            }
            else if (packet.ProtocolOrEntityId < ProtocolVersion)
            {
                client.Kick("Outdated client");
            }
            else
            {
                if (client.Server.UseOfficalAuthentication)
                {
                    try
                    {
                        string authenticated = Http.GetHttpResponse(new Uri(String.Format("http://www.minecraft.net/game/checkserver.jsp?user={0}&serverId={1}", packet.Username, client.Server.ServerHash)));
                        if (authenticated != "YES")
                        {
                            client.Kick("Authentication failed");
                            return;
                        }
                    }
                    catch (Exception exc)
                    {
                        client.Kick("Error while authenticating...");
                        client.Logger.Log(exc);
                        return;
                    }
                }

                Task.Factory.StartNew(client.SendLoginSequence);
            }
        }
コード例 #2
0
        public User AddUser(LoginRequestPacket obj, string username)
        {
            User           result;
            blastersmember member;

            // Fetch the member this belongs to
            using (var context = new BlastersContext())
                member = context.blastersmembers.FirstOrDefault(x => x.members_l_username.ToLower() == username.ToLower());

            using (var context = new BlastersContext())
                result = context.users.FirstOrDefault(x => x.Name.ToLower() == obj.Username.ToLower());


            if (result == null)
            {
                result = CreateUserAccount(member);
            }

            var user = result;

            result.Connection     = obj.Sender;
            result.BlastersMember = null;

            ServiceContainer.Users.Add(user.Connection, user);
            return(user);
        }
コード例 #3
0
 internal LevelInformation(LoginRequestPacket packet)
 {
     LevelType  = packet.LevelType;
     Dimension  = packet.Dimension;
     Difficulty = packet.Difficulty;
     GameMode   = packet.GameMode;
 }
コード例 #4
0
 internal LevelInformation(LoginRequestPacket packet)
 {
     LevelType = packet.LevelType;
     Dimension = packet.Dimension;
     Difficulty = packet.Difficulty;
     GameMode = packet.GameMode;
 }
コード例 #5
0
        public void LoginSendVerifyCode(string verifyCode)
        {
            byte[] bytes = Utils.Util.GetBytes(verifyCode);

            ByteBuffer buf = new ByteBuffer(bytes);

            uint vCode = buf.GetUInt();

            if (QQClient.LoginStatus == LoginStatus.Login)
            {
                //qqclient_set_process(qq, P_LOGIN);	//原来漏了这个  20090709
                //prot_user_request_token(qq, qq->data.operating_number, qq->data.operation, 1, code);
                QQClient.LogManager.Log("send Verify Code:" + vCode.ToString());
                OutPacket outPacket = new LoginRequestPacket(QQClient, QQClient.QQUser.QQKey.Verify_Token, vCode, 0);
                QQClient.PacketManager.SendPacketAnyway(outPacket, QQPort.Main.Name);
            }
            else
            {
                //qqclient_set_process(qq, P_LOGGING);	//原来这个是P_LOGIN,错了。 20090709
                //prot_login_request(qq, &qq->data.verify_token, code, 0);
                QQClient.LogManager.Log("send Verify Code:" + vCode.ToString());
                OutPacket outPacket = new LoginRequestPacket(QQClient, QQClient.QQUser.QQKey.Verify_Token, vCode, 0);
                QQClient.PacketManager.SendPacketAnyway(outPacket, QQPort.Main.Name);
            }
        }
コード例 #6
0
ファイル: Server.cs プロジェクト: vitalyo7/Rasa.NET
        public bool AuthenticateGameServer(LoginRequestPacket packet, CommunicatorClient client)
        {
            lock (GameServers)
            {
                if (GameServers.ContainsKey(packet.ServerId))
                {
                    DisconnectCommunicator(client);
                    Logger.WriteLog(LogType.Debug, $"A server tried to connect to an already in use server slot! Remote Address: {client.Socket.RemoteAddress}");
                    return(false);
                }

                if (!Config.Servers.ContainsKey(packet.ServerId.ToString()))
                {
                    DisconnectCommunicator(client);
                    Logger.WriteLog(LogType.Debug, $"A server tried to connect to a non-defined server slot! Remote Address: {client.Socket.RemoteAddress}");
                    return(false);
                }

                if (Config.Servers[packet.ServerId.ToString()] != packet.Password)
                {
                    DisconnectCommunicator(client);
                    Logger.WriteLog(LogType.Error, $"A server tried to log in with an invalid password! Remote Address: {client.Socket.RemoteAddress}");
                    return(false);
                }

                GameServerQueue.Remove(client);
                GameServers.Add(packet.ServerId, client);

                Logger.WriteLog(LogType.Network, $"The Game server (Id: {packet.ServerId}, Address: {client.Socket.RemoteAddress}, Public Address: {packet.PublicAddress}) has authenticated! Requesting info...");

                return(true);
            }
        }
コード例 #7
0
        private void ProcessLoginRequest(LoginRequestPacket obj)
        {
            var username = obj.Username;
            var password = obj.Password;

            if (AreCredentialsValid(username, password))
            {
                var user = AddUser(obj, username);

                Logger.Instance.Log(Level.Info, user.Name + " has joined the lobby.");


                var packet = new LoginResultPacket(LoginResultPacket.LoginResult.Succesful);
                ClientNetworkManager.Instance.SendPacket(packet, obj.Sender);

                // Send the user a list of sessions going on
                //TODO: Send this when they register the intent - it's more generic
                var sessionService = (GameSessionService)ServiceContainer.GetService(typeof(GameSessionService));
                sessionService.SendUserSessions(user);
                sessionService.SendToUsersOnlineList();
            }


            else
            {
                // Reject the user if they aren't able to authenticate

                var packet = new LoginResultPacket(LoginResultPacket.LoginResult.Failed);
                ClientNetworkManager.Instance.SendPacket(packet, obj.Sender);
            }
        }
コード例 #8
0
        public static void ReadLoginRequest(TestClient client, PacketReader reader)
        {
            LoginRequestPacket lr = new LoginRequestPacket();

            lr.Read(reader);

            if (!reader.Failed)
            {
                TestClient.HandlePacketLoginRequest(client, lr);
            }
        }
コード例 #9
0
    // login request
    public void ReceiveLoginRequest(Socket clientSocket, byte[] data)
    {
        // packet serialize
        LoginRequestPacket packet          = new LoginRequestPacket(data);
        LoginRequestData   joinRequestData = packet.GetData();

        // process



        // send result packet
    }
コード例 #10
0
        private void Button1_Click(object sender, EventArgs e)
        {
            LoginRequestPacket packet = new LoginRequestPacket()
            {
                ID       = textBox1.Text,
                Password = textBox2.Text
            };

            MNetworkEntry.Instance.Send(new ProtobufPacket <LoginRequestPacket>(0, PacketEnum.ProcessType.Data,
                                                                                (int)MessageType.LoginRequest, packet));

            this.Close();
        }
コード例 #11
0
        public void Connect(string server, int port, string account, string token)
        {
            Reset();

            this.loginServer        = new ServerInfo(server, port);
            this.currentWorldServer = this.loginServer;

            // save connection info
            this.networkThread.Start();

            LoginRequestPacket cp = new LoginRequestPacket(account, token);

            SendMessage(cp, false, true);

            this.World = "Connecting...";
        }
コード例 #12
0
        ///// <summary>登录成功事件
        /////   <remark>abu 2008-03-08 </remark>
        ///// </summary>
        //public event EventHandler<QQEventArgs<LoginReplyPacket, LoginPacket>> LoginSuccessed;
        ///// <summary>
        ///// Raises the <see cref="E:LoginSuccessed"/> event.
        ///// </summary>
        ///// <param name="e">The <see cref="LFNet.QQ.Events.QQEventArgs&lt;LFNet.QQ.Packets.In.LoginReplyPacket&gt;"/> instance containing the event data.</param>
        //internal void OnLoginSuccessed(QQEventArgs<LoginReplyPacket, LoginPacket> e)
        //{
        //    this.QQClient.IsLogon = true;
        //    this.QQUser.IsLoggedIn = true;

        //    if (LoginSuccessed != null)
        //    {
        //        LoginSuccessed(this, e);
        //    }
        //}
        // //<summary>
        // //登录重定向事件
        // //</summary>
        //public event EventHandler<QQEventArgs<LoginReplyPacket, LoginPacket>> LoginRedirect;
        //internal void OnLoginRedirect(QQEventArgs<LoginReplyPacket, LoginPacket> e)
        //{
        //    // 如果是登陆重定向,继续登陆
        //    QQClient.LoginRedirect = true;
        //    QQClient.ConnectionManager.ConnectionPool.Release(QQPort.Main.Name);
        //    QQClient.Login(Utils.Util.GetIpStringFromBytes(e.InPacket.RedirectIP), e.InPacket.RedirectPort);
        //    if (LoginRedirect != null)
        //    {
        //        LoginRedirect(this, e);
        //    }
        //}

        // //<summary>
        // //重定向登录时,重定向服务器为空
        // //   <remark>abu 2008-03-10 </remark>
        // //</summary>
        //public event EventHandler<QQEventArgs<LoginReplyPacket, LoginPacket>> LoginRedirectNull;
        // //<summary>
        // //Raises the <see cref="E:LoginRedirectNull"/> event.
        // //</summary>
        // //<param name="e">The <see cref="LFNet.QQ.Events.QQEventArgs&lt;LFNet.QQ.Packets.In.LoginReplyPacket&gt;"/> instance containing the event data.</param>
        //internal void OnLoginRedirectNull(QQEventArgs<LoginReplyPacket, LoginPacket> e)
        //{
        //    if (LoginRedirectNull != null)
        //    {
        //        LoginRedirectNull(this, e);
        //    }
        //}

        ///// <summary>
        ///// 登录失败触发的事件
        /////   <remark>abu 2008-03-10 </remark>
        ///// </summary>
        //public event EventHandler<QQEventArgs<LoginReplyPacket, LoginPacket>> LoginFailed;
        ///// <summary>
        ///// Raises the <see cref="E:LoginFailed"/> event.
        ///// </summary>
        ///// <param name="e">The <see cref="LFNet.QQ.Events.QQEventArgs&lt;LFNet.QQ.Packets.In.LoginReplyPacket&gt;"/> instance containing the event data.</param>
        //internal void OnLoginFailed(QQEventArgs<LoginReplyPacket, LoginPacket> e)
        //{
        //    if (LoginFailed != null)
        //    {
        //        LoginFailed(this, e);
        //    }
        //}

        ///// <summary>
        ///// 登录过程中的未知错误
        ///// </summary>
        //public event EventHandler<QQEventArgs<LoginReplyPacket, LoginPacket>> LoginUnknownError;
        ///// <summary>
        ///// Raises the <see cref="E:LoginUnknownError"/> event.
        ///// </summary>
        ///// <param name="e">The <see cref="LFNet.QQ.Events.QQEventArgs&lt;LFNet.QQ.Packets.In.LoginReplyPacket&gt;"/> instance containing the event data.</param>
        //internal void OnLoginUnknownError(QQEventArgs<LoginReplyPacket, LoginPacket> e)
        //{
        //    if (LoginUnknownError != null)
        //    {
        //        LoginUnknownError(this, e);
        //    }
        //}

        #endregion

        internal void ProcessLoginTouchReply(LoginTouchReplyPacket loginTouchReplyPacket, LoginTouchPacket loginTouchPacket)
        {
            QQEventArgs <LoginTouchReplyPacket, LoginTouchPacket> e = new QQEventArgs <LoginTouchReplyPacket, LoginTouchPacket>(QQClient, loginTouchReplyPacket, loginTouchPacket);

            if (loginTouchReplyPacket.ReplyCode == ReplyCode.OK)
            {
                QQClient.LoginStatus = LoginStatus.Connected;
                if (loginTouchReplyPacket.IsRedirect)//转向
                {
                    if (Utils.Util.IsIPZero(loginTouchReplyPacket.RedirectIP))
                    {
                        //OnLoginRedirectNull(e);
                        QQClient.LogManager.Log("RedirectIp Is Zero!");
                        QQClient.LoginStatus = LoginStatus.Failed;
                    }
                    else
                    {
                        QQClient.LoginStatus = new LoginStatus("Redirect to" + Utils.Util.GetIpStringFromBytes(loginTouchReplyPacket.RedirectIP), "重定向到服务器" + Utils.Util.GetIpStringFromBytes(loginTouchReplyPacket.RedirectIP));
                        //OnLoginRedirect(e);
                        QQClient.LoginRedirect = true;
                        QQClient.ConnectionManager.ConnectionPool.Release(QQPort.Main.Name);
                        QQClient.LogManager.Log("Redirect to " + Utils.Util.GetIpStringFromBytes(loginTouchReplyPacket.RedirectIP));
                        string ipTemp = QQClient.LoginServerHost;
                        QQClient.LoginServerHost         = Utils.Util.GetIpStringFromBytes(QQClient.ServerInfo.CSP_dwConnIP);
                        QQClient.ServerInfo.CSP_dwConnIP = Utils.Util.IpToBytes(ipTemp);
                        //重新登录
                        QQClient.Login();
                    }
                }
                else
                {
                    //将服务器返回的时间和IP存入QQClient等待使用
                    QQClient.ServerTime = loginTouchReplyPacket.ServerTime;
                    QQClient.ClientIP   = loginTouchReplyPacket.ClientIP;
                    //0xba开始登陆
                    QQUser.QQKey.LoginRequestToken = loginTouchReplyPacket.Token;
                    OutPacket outPacket = new LoginRequestPacket(this.QQClient);
                    QQClient.PacketManager.SendPacketAnyway(outPacket, QQPort.Main.Name);
                    //QQUser.QQKey = new QQKey(this.QQUser);
                    //QQClient.LoginManager.
                }
            }
            else
            {
                QQClient.LoginStatus = LoginStatus.Failed;
            }
        }
コード例 #13
0
ファイル: LoginView.cs プロジェクト: Damian666/blasters
        private void Handler(object sender, JavascriptMethodEventArgs args)
        {
            switch (args.MethodName.ToLower())
            {
            case "close":
            {
                Application.Exit();
            }
            break;

            case "openhomepage":
            {
                Process.Start("http://blastersonline.com");
            }
            break;

            case "openforums":
            {
                Process.Start("http://blasters.skideria.com");
            }
            break;

            default:
            {
                var username = FlowController.WebControl.ExecuteJavascriptWithResult("document.getElementById('txt-username').value");
                var password = FlowController.WebControl.ExecuteJavascriptWithResult("document.getElementById('txt-password').value");

                if (username.ToString() == string.Empty || password.ToString() == string.Empty)
                {
                    var code = "bootbox.alert('You must specify a valid username and password. The given credentials are incorrect.');";
                    FlowController.WebControl.ExecuteJavascript(code);
                    return;
                }

                var packet = new LoginRequestPacket(username, password);
                NetworkManager.Instance.SendPacket(packet);

                // Wait a moment
                //Thread.Sleep(500);

                // Change the view
                FlowController.ChangeView(new RoomSelectView());
            }
            break;
            }
        }
コード例 #14
0
        public async Task LoginRequest_With_Invalid_Credentials_Throws_AuthenticationException()
        {
            var client = new APIClient(moq_connection.Object);
            var login  = 1;

            LoginRequestPacket packet = null;

            moq_connection.Setup(con => con.SendPacket(It.IsAny <LoginRequestPacket>()))
            .Callback <APINetworkPacket>(x => packet = (LoginRequestPacket)x);

            var task = client.Login(login, "Foo");

            moq_connection.Raise(con => con.PacketReceived += null,
                                 new LoginResponsePacket()
            {
                RequestId = packet.RequestId, Login = login, LoginStatus = LoginStatus.InvalidPassword
            });

            await TaskHelper.ThrowsAsync <AuthenticationException>(async() => await task);
        }
コード例 #15
0
        private void MsgLoginRequest(LoginRequestPacket packet)
        {
            if (!Server.AuthenticateGameServer(packet, this))
            {
                Socket.Send(new LoginResponsePacket
                {
                    Response = CommLoginReason.Failure
                });
                return;
            }

            Socket.Send(new LoginResponsePacket
            {
                Response = CommLoginReason.Success
            });

            ServerId      = packet.ServerId;
            PublicAddress = packet.PublicAddress;

            RequestServerInfo();
        }
コード例 #16
0
        public async Task LoginResponse_Has_Been_Handled_Properly()
        {
            var client = new APIClient(moq_connection.Object);
            var login  = 1;

            LoginRequestPacket packet = null;

            moq_connection.Setup(con => con.SendPacket(It.IsAny <LoginRequestPacket>()))
            .Callback <APINetworkPacket>(x => packet = (LoginRequestPacket)x);

            var task = client.Login(login, "Foo");

            moq_connection.Raise(con => con.PacketReceived += null,
                                 new LoginResponsePacket()
            {
                RequestId = packet.RequestId, Login = login, LoginStatus = LoginStatus.Successful
            });

            var r = await task;

            Assert.Equal(login, r.Login);
            Assert.Equal(LoginStatus.Successful, r.LoginStatus);
        }
コード例 #17
0
    public void TestLogin()
    {
        connected.Reset();
        socket.BeginConnect(HOST, PORT, new System.AsyncCallback(onConnect), socket);
        connected.WaitOne();
        StyxPacketInfo packetInfo = new StyxPacketInfo();

        packetInfo.socket = socket;
        socket.BeginReceive(packetInfo.headerBuffer, 0, StyxPacketInfo.HEADER_SIZE, 0, new System.AsyncCallback(Read_Callback), packetInfo);

        LoginRequestPacket loginRequestPacket = new LoginRequestPacket();
        // TODO: doan nay cua mini
        var jsonUser = new JSONClass();

        jsonUser ["userid"].AsInt = 2;
        jsonUser ["username"]     = "******";
        jsonUser ["gameid"].AsInt = gameId;


        loginRequestPacket.user       = jsonUser.ToString();
        loginRequestPacket.password   = "******";      //login.pwd;
        loginRequestPacket.operatorid = operatorID;
        sendPacket(loginRequestPacket);
    }
コード例 #18
0
        // login request
        public void ReceiveLoginRequest(Socket clientSocket, byte[] data)
        {
            // packet serialize
            LoginRequestPacket receivePacket    = new LoginRequestPacket(data);
            LoginRequestData   loginRequestData = receivePacket.GetData();

            // process
            bool   result;
            string resultString;

            result = dataProcessor.LoginPlayer(clientSocket, loginRequestData.id, loginRequestData.password, out resultString);

            // make result data
            LoginResultData sendData = new LoginResultData();

            sendData.loginResult = result;
            sendData.message     = resultString;

            //make result packet
            LoginResultPacket sendPacket = new LoginResultPacket(sendData);

            // send result packet
            networkProcessor.Send(clientSocket, sendPacket);
        }
コード例 #19
0
        internal object HandleRequestPacket(ServerConnectorContext serverConnectorContext, int module, int command, LoginRequestPacket packet)
        {
            string errMsg  = Program.ChatServerModel.Login(packet.Username, serverConnectorContext);
            bool   retcode = errMsg == null;

            if (retcode == true)
            {
                Program.ChatServerModel.JoinGroup("Lobby", serverConnectorContext.Id.ToString());
            }

            var resPacket = new LoginResponsePacket()
            {
                RetCode = retcode,
                Message = retcode ? "Login OK" : errMsg
            };

            return(resPacket);
        }
コード例 #20
0
ファイル: TestClient.cs プロジェクト: dineshkummarc/c-raft
 public static void HandlePacketLoginRequest(TestClient client, LoginRequestPacket lr)
 {
     // Do something when logged
     client.StartTimer();
 }
コード例 #21
0
 public static void WritePacket(ref NetOutgoingMessage msg, ref LoginRequestPacket packet)
 {
     msg.Write((byte)Types.LOGIN_REQUEST);
     msg.Write(packet.name);
 }
コード例 #22
0
 public static void ReadPacket(ref NetIncomingMessage msg, ref LoginRequestPacket packet)
 {
     packet.name = msg.ReadString();
 }
コード例 #23
0
        internal void ProcessLoginRequestReply(LoginRequestReplyPacket loginRequestReplyPacket, LoginRequestPacket loginRequestPacket)
        {
            QQEventArgs <LoginRequestReplyPacket, LoginRequestPacket> e = new QQEventArgs <LoginRequestReplyPacket, LoginRequestPacket>(QQClient, loginRequestReplyPacket, loginRequestPacket);
            //if (loginRequestReplyPacket.Png_Data != 0x00)//需要验证码
            //{
            //    if (loginRequestReplyPacket.Next != 0x00)//还有验证码数据没接受完
            //    {
            //        QQClient.LogManager.Log("接收到部分验证码图片数据,继续接收....");
            //        OutPacket outPacket = new LoginRequestPacket(QQClient, loginRequestReplyPacket.Png_Token, 0, 1);//发送一个请求验证码的包
            //        QQClient.PacketManager.SendPacketAnyway(outPacket, QQPort.Main.Name);
            //    }
            //    else//已经得到验证码文件
            //    {
            //        QQClient.LoginStatus = LoginStatus.NeedVerifyCode;
            //        QQClient.QQUser.QQKey.Verify_Token = loginRequestReplyPacket.Answer_Token;
            //        QQClient.LogManager.Log("Need input Verify Code");
            //        OnLoginNeedVerifyCode(e);


            //    }
            //}
            //else//不需要验证码
            //{
            //    QQClient.LogManager.Log("Process LoginRequest Success! Now Process Verify Password...");
            //    QQClient.QQUser.QQKey.Answer_Token = loginRequestReplyPacket.Answer_Token;
            //    OutPacket outPacket =new LoginVerifyPacket(this.QQClient) ;//发送一个登陆请求包
            //    QQClient.PacketManager.SendPacketAnyway(outPacket, QQPort.Main.Name);

            //}
        }
コード例 #24
0
ファイル: PacketHandler.cs プロジェクト: jhead/Cauldron.NET
        private void HandleLogin(Client client, LoginRequestPacket packet)
        {
            if (client.LoggedIn)
                return;

            client.Player.EntityID = Server.TotalEntityCount++;
            client.Stream.WritePacket(new LoginResponsePacket(client.Player.EntityID, Server.ServerName,
                Server.MapSeed, Server.GameMode, (byte)(Server.IsNether ? -1 : 0), (byte)Server.Difficulty, (byte)128, (byte)Server.MaxPlayers));
            client.Player.Username = packet.Username;
            client.LoggedIn = true;
            client.SendInitialChunks();
            client.SendInitialPosition();
            client.SendInitialInventory();

            Server.BroadcastPacket(new ChatMessagePacket("", ChatColor.Yellow + packet.Username + " joined the game."));
            foreach (Client c in Server.GetClients())
            {
                if(!c.Equals(client))
                    client.Stream.WritePacket(new NamedEntitySpawnPacket(c.Player.EntityID, c.Player.Username,
                        (int)c.Player.Location.X, (int)c.Player.Location.Y, (int)c.Player.Location.Z, 0, 0, 0));
            }
            Logger.Info("'" + packet.Username + "' joined the game. [Entity ID = " + client.Player.EntityID + "]");
        }
コード例 #25
0
    private void Login()
    {
        LoginRequestPacket packet = new LoginRequestPacket(usernameField.text, passwordField.text);

        Connection.Instance.SendData(packet.Data);
    }
コード例 #26
0
        protected override void ParseBody(ByteBuffer buf)
        {
            //怎么我得到的数据是//01 00 05 00 00 20 78 09 D7 43 99 8B DD 87 59 82 EA 85 7D 09 9A B2 92 77 53 5B 6D E3 6C B6 66 B3 21 75 6B 0B 37 85
#if DEBUG
            Client.LogManager.Log(ToString() + " Decoded Data:" + Utils.Util.ToHex(buf.ToByteArray()));
#endif
            ReplyCode = buf.Get(); //03: ok   04: need verifying 可是我得到的是01是由于前面错了了一个byte
            buf.Get();             //0x00
            buf.Get();             //0x05
            Png_Data = buf.Get();
            int len = 0;
            if (Png_Data == 0x00 && ReplyCode == 0x01)
            {
                len = (int)buf.Get();
                while (len == 0)
                {
                    len = (int)buf.Get();
                }
            }
            else //ReplyCode != 0x01按下面走 兼容多版本
            {
                buf.GetInt();//需要验证码时为00 00 01 23,不需要时为全0
                len = (int)buf.GetChar();
            }
            Answer_Token = buf.GetByteArray(len);
            if (Png_Data == 0x01)//有验证码数据
            {
                len = (int)buf.GetChar();
                byte[] data = buf.GetByteArray(len);
                buf.Get();
                Next = buf.Get();
                string directory = Utils.Util.MapPath("/Verify/");
                this.CodeFileName = Path.Combine(directory, Client.QQUser.QQ + ".png");
                FileStream fs = null;
                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
                if (Next != 0x00)
                {
                    fs = new FileStream(this.CodeFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read);
                }
                else
                {
                    fs = new FileStream(this.CodeFileName, FileMode.Append, FileAccess.Write, FileShare.Read);
                }
                //fs.Seek(0, SeekOrigin.End);
                fs.Write(data, 0, data.Length);
                fs.Close();
                fs = null;

                len       = (int)buf.GetChar();
                Png_Token = buf.GetByteArray(len);
            }

            //
            if (Png_Data != 0x00)
            {
                if (Next != 0x00)
                {
                    //prot_login_request(qq, &png_token, 0, 1);
                    Client.LogManager.Log("接收到部分验证码图片数据,继续接收....");
                    OutPacket outPacket = new LoginRequestPacket(Client, Png_Token, 0, 1);//发送一个请求验证码的包
                    Client.PacketManager.SendPacketAnyway(outPacket, QQPort.Main.Name);
                }
                else
                {
                    //qq->data.verify_token = answer_token;
                    //qqclient_set_process(qq, P_VERIFYING);
                    Client.LoginStatus = LoginStatus.NeedVerifyCode;
                    Client.QQUser.QQKey.Verify_Token = Answer_Token;
                    Client.LogManager.Log("Need input Verify Code");
                    //Client.LoginManager.OnLoginNeedVerifyCode(e);
                }
            }
            else
            {
                //DBG("process verify password");
                //qq->data.token_c = answer_token;
                //prot_login_verify(qq);
                Client.LogManager.Log("Process LoginRequest Success! Now Process Verify Password...");
                Client.QQUser.QQKey.Answer_Token = Answer_Token;
                OutPacket outPacket = new LoginVerifyPacket(Client);//发送一个登陆请求包
                Client.PacketManager.SendPacketAnyway(outPacket, QQPort.Main.Name);
            }
        }
コード例 #27
0
        private void OnLoginRequest(ProtobufPacket <LoginRequestPacket> packet)
        {
            LoginRequestPacket request = packet.ProtobufMessage;
            LoginAnswerPacket  send    = new LoginAnswerPacket();

            // Packet Data Set

            // 로그인 핸들러에게 로그인이 성공했는지를 알아온다.
            bool success = loginHandler.SignIn(request.ID, request.Password, out string userName);

            // 보낼 패킷의 정보 설정
            send.UserName = userName;
            send.Success  = success;
            send.Context  = "로그인에 성공했습니다.";

            MNetworkPlayer player = NetworkLobby.FindPlayer(packet.Serial);

            if (send.Success == false)
            {
                send.Context = "아이디 또는 비밀번호를 확인해주세요.";
            }
            else if (player != null)
            {
                if (player.PlayerState >= MNetworkPlayer.MPlayerState.LoginSuccess)
                {
                    // 이미 접속중인 클라이언트 처리

                    send.Success = false;
                    send.Context = "이미 접속된 아이디입니다.";
                }
                else
                {
                    MNetworkPlayer find = NetworkLobby.FindPlayer(userName);

                    if (find != null)
                    {
                        // 이미 해당 닉네임을 가진 유저가 접속중임을 처리

                        send.Success = false;
                        send.Context = "해당 아이디는 이미 다른\n컴퓨터에서 사용 중입니다.";
                    }
                    else
                    {
                        // 없다면 네임 리스트에 추가해준다.

                        player.ID          = request.ID;
                        player.Password    = request.Password;
                        player.PlayerState = MNetworkPlayer.MPlayerState.LoginSuccess;
                        player.UserName    = userName;

                        NetworkLobby.AddPlayerToNameList(player);

                        send.Success = true;
                    }
                }
            }

            if (send.Success == true)
            {
                Debug.Log($"S:[{packet.Serial}] The login was successful. Name: {player.UserName}");
            }
            else
            {
                Debug.Log($"S:[{packet.Serial}] Login failed. Name: {player.UserName}");
            }

            SendPacket(new ProtobufPacket <LoginAnswerPacket>(packet.Serial, PacketEnum.ProcessType.Data,
                                                              (int)MessageType.LoginAnswer, send));
        }
コード例 #28
0
        public static Packet RenderPacket(PacketType type, string payload)
        {
            switch (type)
            {
            case PacketType.Exit:
            {
                ExitPacket p = JsonConvert.DeserializeObject <ExitPacket>(payload);
                return(p);
            }

            case PacketType.Error:
            {
                ErrorPacket p = JsonConvert.DeserializeObject <ErrorPacket>(payload);
                return(p);
            }

            case PacketType.VersionRequest:
            {
                VersionPacket p = JsonConvert.DeserializeObject <VersionPacket>(payload);
                return(p);
            }

            case PacketType.VersionResponse:
            {
                VersionPacket p = JsonConvert.DeserializeObject <VersionPacket>(payload);
                return(p);
            }

            case PacketType.LoginRequest:
            {
                LoginRequestPacket p = JsonConvert.DeserializeObject <LoginRequestPacket>(payload);
                return(p);
            }

            case PacketType.LoginResponse:
            {
                LoginResponsePacket p = JsonConvert.DeserializeObject <LoginResponsePacket>(payload);
                return(p);
            }

            case PacketType.PlayerListRequest:
            {
                PlayerListRequestPacket p = JsonConvert.DeserializeObject <PlayerListRequestPacket>(payload);
                return(p);
            }

            case PacketType.PlayerListResponse:
            {
                LoginResponsePacket p = JsonConvert.DeserializeObject <LoginResponsePacket>(payload);
                return(p);
            }

            case PacketType.CreateLobbyRequest:
            {
                CreateLobbyRequestPacket p = JsonConvert.DeserializeObject <CreateLobbyRequestPacket>(payload);
                return(p);
            }

            case PacketType.CreateLobbyResponse:
            {
                CreateLobbyResponsePacket p = JsonConvert.DeserializeObject <CreateLobbyResponsePacket>(payload);
                return(p);
            }

            default:
                Console.WriteLine("packet type not found.");
                return(new Packet());
            }
        }
コード例 #29
0
        public ClientNetworkEventListener(NetPacketProcessor netPacketProcessor)
        {
            _packetProcessor = netPacketProcessor;

            _cachedLoginRequestPacket = new LoginRequestPacket();
        }