Exemplo n.º 1
0
        public void Parse(Shared.PC sender, Packet packet)
        {
            using (var ms = new MemoryStream(packet.Data))
            {
                using (var br = new BinaryReader(ms))
                {
                    Aid              = br.ReadInt32();
                    Authcode         = br.ReadInt32();
                    UserLevel        = br.ReadInt32();
                    Clienttype       = br.ReadInt16();
                    Sex              = br.ReadByte();
                    ((PC)sender).Aid = Aid;
                }
            }

            Logging.Debug(string.Format("Ch_Enter {{\n\tAID: {0},\n\tAuthCode: {1},\n\tUserLevel: {2},\n\tClienttype: {3},\n\tSex: {4}\n}}", Aid, Authcode, UserLevel, Clienttype, Sex));
            Worker.Singleton.Clients.Add((PC)sender);

            var ipPoint = (IPEndPoint)sender.Socket.RemoteEndPoint;

            using (var account = new Account.AccountClient())
            {
                var ah_logon_exist = account.Ha_Logon(Aid, Authcode, Sex, Worker.Singleton.Clients.Count(), Config.Sid, Helper.IpToInt(ipPoint.Address));
                if (ah_logon_exist != null)
                {
                    sender.Id    = ah_logon_exist.Id;
                    sender.Email = ah_logon_exist.Email;
                    sender.PacketQueue.Enqueue(Hc_Aid.CreateBuilder().SetAid(Aid).Build());
                    sender.PacketQueue.Enqueue(Hc_Accept_Enter.CreateBuilder().SetAid(Aid).Build());
                    sender.PacketQueue.Enqueue(Hc_Block_Character.CreateBuilder().Build());
                    sender.PacketQueue.Enqueue(Hc_Second_Password_Login.CreateBuilder().SetAid(Aid).SetSeed(0).SetResult(0).Build());
                }
            }
        }
Exemplo n.º 2
0
        public void Parse(Shared.PC sender, Packet packet)
        {
            using (var ms = new MemoryStream(packet.Data))
                using (var br = new BinaryReader(ms))
                {
                    CharNum = br.ReadByte();
                }

            Logging.Debug(string.Format("Ch_Select_Char {{\n\tCharNum: {0}\n}}", CharNum));
            var character = ((PC)sender).Characters.FirstOrDefault(x => x.CharNum == CharNum);

            if (character != null)
            {
                var mapserver = Worker.Singleton.Maps.FirstOrDefault(m => m.Key == character.mapname);
                var server    = Worker.Singleton.Serverlist.FirstOrDefault(s => s.SID == mapserver.Value);

                sender.PacketQueue.Enqueue(Hc_Notify_Zonesvr.CreateBuilder().SetGid(character.GID).SetMapname(character.mapname).SetIp(server.ip).SetPort(server.port).Build());
            }
        }
Exemplo n.º 3
0
        public void Parse(Shared.PC sender, Packet packet)
        {
            try
            {
                using (var ms = new MemoryStream(packet.Data))
                {
                    using (var br = new BinaryReader(ms))
                    {
                        this.Version    = br.ReadInt32();
                        this.Id         = br.ReadCString(24);
                        this.Password   = br.ReadCString(24);
                        this.Clienttype = br.ReadByte();
                    }
                }

                Logging.Debug(string.Format("{0} {1}\n", this.GetType().Name, Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented)));

                if ((Config.ClientType != -1 && Config.ClientType != Clienttype) ||
                    (Config.Version != 0 && Config.Version != Version))
                {
                    sender.PacketQueue.Enqueue(Ac_Refuse_Login.CreateBuilder().SetErrorCode((byte)ErrorCodes.REFUSE_INVALID_VERSION).Build());
                    return;
                }

                using (var nLogin = new nLoginDataContext())
                {
                    var result = nLogin.AuthenticateUser(Id).FirstOrDefault();
                    // account exists check
                    if (result == null)
                    {
                        Logging.Debug("authenticateUser had no result");
                        sender.PacketQueue.Enqueue(Ac_Refuse_Login.CreateBuilder().SetErrorCode((byte)ErrorCodes.REFUSE_INVALID_ID).Build());
                        return;
                    }

                    // wrong password check
                    if (result.Passwd != Password)
                    {
                        Logging.Debug("wrong password");
                        sender.PacketQueue.Enqueue(Ac_Refuse_Login.CreateBuilder().SetErrorCode((byte)ErrorCodes.REFUSE_INVALID_PASSWD).Build());
                        return;
                    }

                    switch (result.isConfirmed)
                    {
                    case 5:     // banned
                        Logging.Debug("currently banned (5)");
                        sender.PacketQueue.Enqueue(Ac_Refuse_Login.CreateBuilder().SetErrorCode((byte)ErrorCodes.REFUSE_BLOCK_TEMPORARY).Build());
                        return;

                    case 10:     // not confirmed
                        Logging.Debug("account not confirmed (10)");
                        sender.PacketQueue.Enqueue(Ac_Refuse_Login.CreateBuilder().SetErrorCode((byte)ErrorCodes.REFUSE_NOT_CONFIRMED).Build());
                        return;
                    }

                    var genderinfo = nLogin.GetSexInfo(result.AID).FirstOrDefault();
                    if (genderinfo != null)
                    {
                        ((PC)sender).RegNum = genderinfo.RegNum;
                        ((PC)sender).Sex    = genderinfo.sex;
                        ((PC)sender).Email  = genderinfo.Email;
                        ((PC)sender).Id     = Id;

                        var accept = Ac_Accept_Login.CreateBuilder().SetAID(result.AID).SetAuthCode(SessionManager.GetSessionId()).SetGender(genderinfo.sex);
                        var exist  = Worker.Singleton.Clients.FirstOrDefault(c => ((PC)c).AcceptPacket.AID == result.AID);
                        if (exist != null)
                        {
                            // last login is still recognized, wait...
                            Logging.Debug("last login is still recognized, wait...");
                            //foreach (var ch in Worker.Singleton.Serverlist)
                            //    ch.PacketQueue.Enqueue(Ah_Disconnect.CreateBuilder().SetAID(result.AID).SetReason(2).Build());

                            sender.PacketQueue.Enqueue(Sc_Notify_Ban.CreateBuilder().SetErrorCode((byte)BanCodes.BAN_INFORMATION_REMAINED).Build());
                            exist.Stop();

                            //using (var cl = new ConnectLogDataContext())
                            //    cl.AddConnectLogWhenLogout(result.AID);

                            Worker.Singleton.Clients.Remove(exist);
                            return;
                        }

                        //using (var cl = new ConnectLogDataContext())
                        //    cl.AddConnectLogWhenLogin(sender.Ip, Id, result.AID, false, true);

                        ((PC)sender).AcceptPacket = accept.Build();
                        sender.PacketQueue.Enqueue(((PC)sender).AcceptPacket);
                        Worker.Singleton.Clients.Add((PC)sender);
                    }
                }
            }
            catch (Exception ex)
            {
                Logging.CriticalLog(ex.Message);
            }
        }