public BulletinMsgData AddBulletinMsg(string msgID, int playMinutes, int playNum, string bulletinText, int msgType = 0)
        {
            BulletinMsgData bulletinMsgData = new BulletinMsgData
            {
                MsgID         = msgID,
                PlayMinutes   = playMinutes,
                ToPlayNum     = playNum,
                BulletinText  = bulletinText,
                BulletinTicks = TimeUtil.NOW(),
                MsgType       = msgType
            };

            if (playMinutes != 0)
            {
                lock (this._BulletinMsgDict)
                {
                    this._BulletinMsgDict[msgID] = bulletinMsgData;
                }
                if (playMinutes < 0)
                {
                    string fromDate = TimeUtil.NowDateTime().ToString("yyyy-MM-dd HH:mm:ss");
                    string toDate   = TimeUtil.NowDateTime().AddMinutes((double)playMinutes).ToString("yyyy-MM-dd HH:mm:ss");
                    Global.AddDBBulletinMsg(msgID, fromDate, toDate, 0, bulletinText);
                }
            }
            return(bulletinMsgData);
        }
        public void SendAllBulletinMsgToGM(GameClient client)
        {
            List <string> msgList = new List <string>();

            lock (this._BulletinMsgDict)
            {
                foreach (string key in this._BulletinMsgDict.Keys)
                {
                    BulletinMsgData bulletinMsgData = this._BulletinMsgDict[key];
                    string          bulletinTm      = new DateTime(bulletinMsgData.BulletinTicks * 10000L).ToString("yyyy-MM-dd HH:mm:ss");
                    string          textMsg         = string.Format("{0} {1} {2} {3} {4} {5}", new object[]
                    {
                        bulletinMsgData.MsgID,
                        bulletinMsgData.PlayMinutes,
                        bulletinMsgData.ToPlayNum,
                        bulletinMsgData.Interval,
                        bulletinTm,
                        bulletinMsgData.BulletinText
                    });
                    msgList.Add(textMsg);
                }
            }
            for (int i = 0; i < msgList.Count; i++)
            {
                GameManager.ClientMgr.SendSystemChatMessageToClient(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, msgList[i]);
            }
        }
        /// <summary>
        /// 发布公告消息
        /// </summary>
        /// <param name="msgID"></param>
        /// <param name="playMinutes"></param>
        /// <param name="playNum"></param>
        /// <param name="bulletinText"></param>
        public BulletinMsgData AddBulletinMsg(string msgID, int playNum, string bulletinText)
        {
            BulletinMsgData bulletinMsgData = new BulletinMsgData()
            {
                MsgID         = msgID,
                PlayMinutes   = -1,
                ToPlayNum     = playNum,
                BulletinText  = bulletinText,
                BulletinTicks = DateTime.Now.Ticks / 10000,
            };

            lock (_BulletinMsgDict)
            {
                _BulletinMsgDict[msgID] = bulletinMsgData;
            }

            return(bulletinMsgData);
        }
        public void ProcessBulletinMsg()
        {
            long          ticks             = TimeUtil.NOW();
            List <string> bulletinMsgIDList = new List <string>();

            lock (this._BulletinMsgDict)
            {
                foreach (string key in this._BulletinMsgDict.Keys)
                {
                    BulletinMsgData bulletinMsgData = this._BulletinMsgDict[key];
                    if (bulletinMsgData.PlayMinutes >= 0)
                    {
                        if (bulletinMsgData.Interval > 0 && ticks >= bulletinMsgData.BulletinTicks && ticks - bulletinMsgData.LastBulletinTicks >= (long)(bulletinMsgData.Interval * 1000))
                        {
                            bulletinMsgData.LastBulletinTicks = ticks;
                            BulletinMsgData msg = new BulletinMsgData
                            {
                                MsgID         = bulletinMsgData.MsgID,
                                PlayMinutes   = 0,
                                ToPlayNum     = 1,
                                BulletinText  = bulletinMsgData.BulletinText,
                                BulletinTicks = bulletinMsgData.BulletinTicks,
                                MsgType       = 0
                            };
                            GameManager.ClientMgr.NotifyAllBulletinMsg(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, null, msg, 0, 0);
                        }
                        if (ticks - bulletinMsgData.BulletinTicks >= (long)bulletinMsgData.PlayMinutes * 60L * 1000L)
                        {
                            Global.RemoveDBBulletinMsg(key);
                            bulletinMsgIDList.Add(key);
                        }
                    }
                }
                for (int i = 0; i < bulletinMsgIDList.Count; i++)
                {
                    this._BulletinMsgDict.Remove(bulletinMsgIDList[i]);
                }
                bulletinMsgIDList.Clear();
                bulletinMsgIDList = null;
            }
        }
        public BulletinMsgData AddBulletinMsgBackground(string msgID, string fromDate, string toDate, int interval, string bulletinText)
        {
            BulletinMsgData bulletinMsgData = new BulletinMsgData
            {
                MsgID         = msgID,
                Interval      = interval,
                BulletinText  = bulletinText,
                BulletinTicks = DataHelper.ConvertToTicks(fromDate)
            };
            long PlayTicks = DataHelper.ConvertToTicks(toDate) - bulletinMsgData.BulletinTicks;

            bulletinMsgData.PlayMinutes = (int)(PlayTicks / 60000L);
            BulletinMsgData result;

            if (string.IsNullOrEmpty(msgID) || PlayTicks < 0L || interval <= 0)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("后台公告数据错误:{0} {1} {2} {3} {4}", new object[]
                {
                    msgID,
                    fromDate,
                    toDate,
                    interval,
                    bulletinText
                }), null, true);
                result = null;
            }
            else
            {
                lock (this._BulletinMsgDict)
                {
                    this._BulletinMsgDict[msgID] = bulletinMsgData;
                    Global.AddDBBulletinMsg(msgID, fromDate, toDate, interval, bulletinText);
                }
                result = bulletinMsgData;
            }
            return(result);
        }