Esempio n. 1
0
        //-------------------------------------------------------------------------
        public void update(float elapsed_tm)
        {
            // 定时向客户端广播消息
            mfTotalSecond += elapsed_tm;
            if (mfTotalSecond - mfLastUpdateSecond > mfUpdateTimeSpan)
            {
                mfLastUpdateSecond = mfTotalSecond;

                // 5Hz同步所有玩家金币
                Dictionary <uint, CLogicTurret> map_turret = mScene.getMapTurret();
                List <string> vec_param_ret = new List <string>();
                vec_param_ret.Add(((byte)_eProtocolDesktop.s2allcSyncAllPlayerGold).ToString());
                vec_param_ret.Add(map_turret.Count.ToString());
                foreach (var turret in map_turret)
                {
                    uint et_player_rpcid = turret.Value.getScenePlayerInfo().et_player_rpcid;
                    vec_param_ret.Add(et_player_rpcid.ToString());
                    int player_gold = mScene.getListener().onLogicSceneGetPlayerGold(et_player_rpcid);
                    vec_param_ret.Add(player_gold.ToString());
                }
                mQueProtocol.Enqueue(vec_param_ret);

                // 5Hz广播协议,每次最多发送10条
                int per_msgcount = 10;
                if (per_msgcount > mQueProtocol.Count)
                {
                    per_msgcount = mQueProtocol.Count;
                }

                List <string> vec_param = new List <string>();
                vec_param.Add(((byte)_eProtocolDesktop.s2allcLogicUpdate).ToString());
                vec_param.Add(per_msgcount.ToString());
                while (per_msgcount > 0)
                {
                    List <string> l = mQueProtocol.Dequeue();
                    vec_param.Add(l.Count.ToString());
                    vec_param.AddRange(l);
                    --per_msgcount;
                }

                mScene.getListener().onLogicScene2RenderAll(vec_param);
            }
        }