/// <summary>
 /// 广播执行
 /// </summary>
 private void Dispatch()
 {
     if (dispacherQueue.Count > 0)
     {
         lock (locker)
         {
             int count = dispacherQueue.Count;
             for (int i = 0; i < count; i++)
             {
                 MsgDispatcher dispacher = dispacherQueue.Dequeue();
                 Msg           msg       = dispacher.msg;
                 object[]      param     = dispacher.param;
                 if (msg_dic.ContainsKey(msg))
                 {
                     Dictionary <object, MsgRegister> dic = msg_dic[msg];
                     IEnumerator iter = dic.GetEnumerator();
                     while (iter.MoveNext())                                  //迭代器模式
                     {
                         KeyValuePair <object, MsgRegister> pair = (KeyValuePair <object, MsgRegister>)iter.Current;
                         MsgRegister register = pair.Value;
                         register.Invoke(param);
                     }
                 }
             }
         }
     }
 }
Beispiel #2
0
    //当按下注册按钮
    public void OnRegClick()
    {
        //用户名密码为空
        if (idInput.text == "" || pwInput.text == "")
        {
            PanelManager.Open <TipPanel>("用户名和密码不能为空");
            return;
        }
        //两次密码不同
        if (repInput.text != pwInput.text)
        {
            PanelManager.Open <TipPanel>("两次输入的密码不同");
            return;
        }
        if (genderToggle[0].isOn == false && genderToggle[1].isOn == false)
        {
            PanelManager.Open <TipPanel>("请选择性别");
            return;
        }
        //发送
        MsgRegister msgReg = new MsgRegister();

        msgReg.id = idInput.text;
        msgReg.pw = pwInput.text;
        if (genderToggle[0].isOn)
        {
            msgReg.gender = (int)Gender.Male;
        }
        else if (genderToggle[1].isOn)
        {
            msgReg.gender = (int)Gender.Female;
        }
        NetManager.Send(msgReg);
    }
Beispiel #3
0
        /// <summary>
        /// 处理注册信息
        /// </summary>
        /// <param name = "c" ></ param >
        /// < param name="msgBase"></param>
        public static void MsgRegister(ClientSocket c, MsgBase msgBase)
        {
            MsgRegister    msg = (MsgRegister)msgBase;
            RegisterResult rst = UserManager.Instance.Register(msg.RegisterType, msg.Account, msg.Password, out string token);

            msg.Result = rst;
            ServerSocket.SendMessage(c, msg);
        }
Beispiel #4
0
    //发送注册协议
    public void OnRegisterClick()
    {
        MsgRegister msg = new MsgRegister();

        msg.id = idInput.text;
        msg.pw = pwInput.text;
        NetManager.Send(msg);
    }
Beispiel #5
0
    void OnReceive(byte[] bytes)
    {
        //Debug.Log("receive bytes: " + BitConverter.ToInt32(bytes, 0));
        var byteArray = new ByteArray();

        byteArray.Write(bytes);
        MsgRegister.Dispatch("10001", byteArray);
    }
    /// <summary>
    /// 注册消息
    /// </summary>
    /// <param name="msg"></param>
    /// <param name="obj"></param>
    /// <param name="method"></param>
    public void Register(Msg msg, object obj, string methodName)
    {
        if (!msg_dic.ContainsKey(msg))
        {
            msg_dic.Add(msg, new Dictionary <object, MsgRegister>());
        }

        MsgRegister register = new MsgRegister(obj, methodName);

        msg_dic[msg][obj] = register;
    }
        void Main()
        {
            MsgRegister.Regist("PlayDie", OnPlayerDie);

            //when get bytes from socket(OnReceive)
            {
                string     name      = "PlayerDie";
                IByteArray byteArray = new ByteArray();
                byteArray.Write(new byte[10]);
                MsgRegister.Dispatch(name, byteArray);
            }
        }
Beispiel #8
0
    //收到注册协议
    public void OnMsgRegister(MsgBase msgBase)
    {
        MsgRegister msg = (MsgRegister)msgBase;

        if (msg.result == 0)
        {
            Debug.Log("注册成功");
        }
        else
        {
            Debug.Log("注册失败");
        }
    }
Beispiel #9
0
    public static void MsgRegister(ClientState c, MsgBase msgBase)
    {
        MsgRegister msg = (MsgRegister)msgBase;

        if (DbManager.Register(msg.id, msg.pw))
        {
            DbManager.CreatePlayer(msg.id);
            msg.result = 0;
        }
        else
        {
            msg.result = 1;
        }
        NetManager.Send(c, msg);
    }
Beispiel #10
0
    /// <summary>
    /// 注册协议提交
    /// </summary>
    /// <param name="registerType"></param>
    /// <param name="userName"></param>
    /// <param name="password"></param>
    /// <param name="code"></param>
    /// <param name="callback"></param>
    public static void Register(RegisterType registerType, string userName, string password, string code, Action <RegisterResult> callback)
    {
        MsgRegister msg = new MsgRegister();

        msg.RegisterType = registerType;
        msg.Account      = userName;
        msg.Password     = password;
        msg.Code         = code;
        NetManager.Instance.SendMessage(msg);
        NetManager.Instance.AddProtoListener(ProtocolEnum.MsgRegister, (resmsg) =>
        {
            MsgRegister msgRegister = (MsgRegister)resmsg;
            callback(msgRegister.Result);
        });
    }
Beispiel #11
0
    // 玩家点击注册按钮
    public void OnRegisterClick()
    {
        MsgRegister msg = new MsgRegister();

        msg.id = idInput.text;
        msg.pw = pwInput.text;
        if (msg.id != "" && msg.pw != "")
        {
            NetManager.Send(msg);
        }
        else
        {
            Debug.Log("id or pw can't be empty string");
        }
    }
    //收到注册协议
    public void OnMsgRegister(Request request)
    {
        MsgRegister msg = Login.MsgRegister.Parser.ParseFrom(request.Msg);

        if (msg.Result == 0)
        {
            Debug.Log("注册成功");
            //提示
            PanelManager.Open <TipPanel>("注册成功");
            //关闭界面
            Hide();
        }
        else
        {
            PanelManager.Open <TipPanel>("注册失败");
        }
    }
Beispiel #13
0
    //收到注册协议
    public void OnMsgRegister(MsgBase msgBase)
    {
        MsgRegister msg = (MsgRegister)msgBase;

        if (msg.result == 0)
        {
            Debug.Log("注册成功");
            //提示
            PanelManager.Open <TipPanel>("注册成功");
            //关闭界面
            Close();
        }
        else
        {
            PanelManager.Open <TipPanel>("注册失败");
        }
    }
Beispiel #14
0
    //当按下注册按钮
    public void OnRegClick()
    {
        //用户名密码为空
        if (idInput.text == "" || pwInput.text == "")
        {
            PanelManager.Open <TipPanel>("用户名和密码不能为空");
            return;
        }
        //两次密码不同
        if (repInput.text != pwInput.text)
        {
            PanelManager.Open <TipPanel>("两次输入的密码不同");
            return;
        }
        //发送
        MsgRegister msgReg = new MsgRegister();

        msgReg.id = idInput.text;
        msgReg.pw = pwInput.text;
        NetManager.Send(msgReg);
    }
Beispiel #15
0
 void RegistMsg()
 {
     MsgRegister.Regist("10001", OnMsg_Bytes);
     MsgRegister.Regist("10002", OnMsg_Protobuf);
 }
 public override void Regist()
 {
     MsgRegister.Regist("key2", (x) => { });//This will auto regist
 }
 void Regist()
 {
     MsgRegister.Regist("id", OnMsg);
 }
Beispiel #18
0
 public override void Regist()
 {
     MsgRegister.Regist("key", (x) => { });
 }
        public static void HandleRegister(Client pClient, MsgRegister pMsg)
        {
            Client trash;

            if (pMsg.CancelRequest)
            {
                try
                {
                    pClient.Disconnect();
                }
                catch
                {
                    ServerKernel.Players.TryRemove(pClient.Identity, out trash);
                    ServerKernel.CharacterCreation.TryRemove(pClient.Identity, out trash);
                    ServerKernel.CharacterCreation.TryRemove(pClient.AccountIdentity, out trash);
                }
                return;
            }

            if (ServerKernel.CharacterCreation.TryGetValue(pClient.AccountIdentity, out trash))
            {
                trash = null;

                if (CheckName(pMsg.Name))
                {
                    var pRepository = new CharacterRepository();
                    if (pRepository.AccountHasCharacter(pClient.AccountIdentity))
                    {
                        //DisconnectWithMsg(pClient, ServerMessages.CharacterCreation.AccountHasCharacter);
                        pClient.Send(ServerMessages.CharacterCreation.AccountHasCharacter);
                        return;
                    }
                    if (pRepository.CharacterExists(pMsg.Name))
                    {
                        //DisconnectWithMsg(pClient, ServerMessages.CharacterCreation.NameTaken);
                        pClient.Send(ServerMessages.CharacterCreation.NameTaken);
                        return;
                    }

                    ProfessionType profession = ((ProfessionType)pMsg.Profession > ProfessionType.INTERN_TAOIST
                        ? ProfessionType.INTERN_TAOIST
                        : (ProfessionType)(pMsg.Profession / 10 * 10));
                    if (!Enum.IsDefined(typeof(BodyType), pMsg.Body) ||
                        !Enum.IsDefined(typeof(ProfessionType), profession))
                    {
                        // The client is a proxy exploiting the server. Disconnect the client.
                        DisconnectWithMsg(pClient, ServerMessages.CharacterCreation.AccessDenied);
                        return;
                    }

                    switch (profession)
                    {
                    case ProfessionType.INTERN_ARCHER:
                    case ProfessionType.INTERN_NINJA:
                    case ProfessionType.INTERN_TAOIST:
                    case ProfessionType.INTERN_TROJAN:
                    case ProfessionType.INTERN_WARRIOR:
                    case ProfessionType.INTERN_MONK:
                        break;

                    default:
                    {
                        DisconnectWithMsg(pClient, ServerMessages.CharacterCreation.AccessDenied);
                        return;
                    }
                    }

                    ushort hair     = 410;
                    uint   lookface = 0;
                    if (pMsg.Body == (ushort)BodyType.THIN_MALE || pMsg.Body == (ushort)BodyType.HEAVY_MALE)
                    {
                        if ((pMsg.Profession / 10) == 5)
                        {
                            lookface = (uint)(new Random().Next(103, 107));
                        }
                        else if ((pMsg.Profession / 10) == 6)
                        {
                            lookface = (uint)(new Random().Next(109, 113));
                        }
                        else
                        {
                            lookface = (uint)(new Random().Next(1, 102));
                        }
                    }
                    else
                    {
                        hair = 410;
                        if ((pMsg.Profession / 10) == 5)
                        {
                            lookface = (uint)(new Random().Next(291, 295));
                        }
                        else if ((pMsg.Profession / 10) == 6)
                        {
                            lookface = (uint)(new Random().Next(300, 304));
                        }
                        else
                        {
                            lookface = (uint)(new Random().Next(201, 290));
                        }
                    }

                    #region Initial HairStyle and Lookface for monks
                    switch (profession)
                    {
                    case ProfessionType.INTERN_MONK:
                        if (pMsg.Body == (ushort)BodyType.THIN_MALE)
                        {
                            lookface = (uint)(new Random().Next(109, 113));
                            hair     = 400;
                        }
                        else if (pMsg.Body == (ushort)BodyType.HEAVY_MALE)
                        {
                            lookface = (uint)(new Random().Next(129, 133));
                            hair     = 400;
                        }
                        else if (pMsg.Body == (ushort)BodyType.THIN_FEMALE)
                        {
                            lookface = (uint)(new Random().Next(300, 304));
                        }
                        else if (pMsg.Body == (ushort)BodyType.HEAVY_FEMALE)
                        {
                            lookface = (uint)(new Random().Next(325, 329));
                        }
                        break;
                    }
                    #endregion

                    DbPointAllot points =
                        ServerKernel.PointAllot.Values.FirstOrDefault(
                            x => x.Profession == ((pMsg.Profession - (pMsg.Profession % 10)) / 10) && x.Level == 1);
                    if (points == null)
                    {
                        pClient.Send(new MsgTalk("Could not fetch class attribute points.", ChatTone.CHARACTER_CREATION));
                        return;
                    }

                    int    idx    = new Random().Next(m_startX.Length - 1);
                    ushort startX = m_startX[idx];
                    ushort startY = m_startY[idx];

                    switch (profession)
                    {
                    case ProfessionType.INTERN_TROJAN:
                    case ProfessionType.INTERN_WARRIOR:
                    case ProfessionType.INTERN_ARCHER:
                    case ProfessionType.INTERN_NINJA:
                    case ProfessionType.INTERN_TAOIST:
                    case ProfessionType.INTERN_MONK:
                    {
                        break;
                    }

                    default:
                        DisconnectWithMsg(pClient, ServerMessages.CharacterCreation.AccessDenied);
                        return;
                    }

                    uint money = 100000, emoney = 25;

                    ushort startLife = (ushort)(((points.Agility + points.Strength + points.Spirit) * 3) + points.Vitality * 24);

                    var newUser = new DbUser
                    {
                        AccountId           = pClient.AccountIdentity,
                        Name                = pMsg.Name,
                        Lookface            = pMsg.Body + (lookface * 10000),
                        Profession          = (byte)profession,
                        Mate                = "None",
                        AdditionalPoints    = 0,
                        Agility             = points.Agility,
                        Strength            = points.Strength,
                        Vitality            = points.Vitality,
                        Spirit              = points.Spirit,
                        AutoAllot           = 1,
                        AutoExercise        = 0,
                        BoundEmoney         = 4300,
                        Business            = 255,
                        CoinMoney           = 0,
                        CurrentLayout       = 0,
                        Donation            = 0,
                        Emoney              = emoney,
                        Experience          = 0,
                        Level               = 1,
                        FirstProfession     = 0,
                        Metempsychosis      = 0,
                        Flower              = 0,
                        HomeId              = 0,
                        LastLogin           = 0,
                        LastLogout          = 0,
                        LastProfession      = 0,
                        Life                = startLife,
                        LockKey             = 0,
                        Hair                = hair,
                        Mana                = 0,
                        MapId               = _START_MAP,
                        MapX                = startX,
                        MapY                = startY,
                        MeteLevel           = 0,
                        Money               = money,
                        MoneySaved          = 0,
                        Orchids             = 0,
                        PkPoints            = 0,
                        RedRoses            = 0,
                        StudentPoints       = 0,
                        Tulips              = 0,
                        Virtue              = 0,
                        WhiteRoses          = 0,
                        EnlightPoints       = 0,
                        HeavenBlessing      = (uint)(UnixTimestamp.Timestamp() + 60 * 60 * 24 * 30),
                        ExperienceExpires   = (uint)(UnixTimestamp.Timestamp() + 60 * 60 * 24),
                        ExperienceMultipler = 10
                    };

                    if (pRepository.CreateNewCharacter(newUser))
                    {
                        uint idUser = newUser.Identity;

                        try
                        {
                            GenerateInitialStatus(idUser, profession);
                        }
                        catch
                        {
                            ServerKernel.Log.SaveLog("Could not create initial status for character " + idUser, true, LogType.ERROR);
                        }
                        ServerKernel.Log.SaveLog(string.Format("User [({0}){1}] has created character {2}.",
                                                               pClient.AccountIdentity, idUser, newUser.Name), true);

                        pClient.Send(ServerMessages.CharacterCreation.AnswerOk);
                        return;
                    }
                }
                else
                {
                    //DisconnectWithMsg(pClient, ServerMessages.CharacterCreation.InvalidName);
                    pClient.Send(ServerMessages.CharacterCreation.InvalidName);
                    return;
                }
            }
            else
            {
                DisconnectWithMsg(pClient, ServerMessages.CharacterCreation.AccessDenied);
                return;
            }
        }