コード例 #1
0
    public OpRes reqSendMail(ParamSendMailFullSvr param)
    {
        int state = getRemoteServerState(0);

        if (state == StateMgr.state_closed)
        {
            return(OpRes.op_res_export_excel_not_open);
        }

        try
        {
            ServersEngine e       = m_serversEngines[0];
            int           retCode = e.reqService(param, ServiceType.serviceTypeSendMail);

            if (retCode == (int)RetCodeRemote.ret_error)
            {
                return(OpRes.op_res_failed);
            }

            if (retCode == (int)RetCodeRemote.ret_busy)
            {
                return(OpRes.op_res_export_service_busy);
            }

            return(OpRes.opres_success);
        }
        catch (System.Exception ex)
        {
        }
        return(OpRes.op_res_failed);
    }
コード例 #2
0
    private void run()
    {
        while (m_run)
        {
            switch (m_curState)
            {
            case ThreadState.state_idle:
            {
                Thread.Sleep(5000);
            }
            break;

            case ThreadState.state_busy:
            {
                ParamSendMailFullSvr data = null;
                while (m_taskQue.Count > 0)
                {
                    lock (m_lockObj)
                    {
                        data = m_taskQue.Dequeue();
                    }

                    if (!m_run)
                    {
                        break;
                    }

                    if (data != null)
                    {
                        sendMail(data);
                        lock (m_lockObj)
                        {
                            try
                            {
                                m_taskFlag.Remove(data.m_dbServerIP);
                            }
                            catch (System.Exception ex)
                            {
                            }
                        }
                    }
                }
                m_curState = ThreadState.state_idle;
            }
            break;
            }
        }
    }
コード例 #3
0
    public override int doService(ServiceParam param)
    {
        if (param == null)
        {
            return((int)RetCode.ret_error);
        }

        ParamSendMailFullSvr p = (ParamSendMailFullSvr)param;

        lock (m_lockObj)
        {
            if (m_taskFlag.ContainsKey(p.m_dbServerIP))
            {
                return((int)RetCode.ret_busy);
            }
            m_taskFlag.Add(p.m_dbServerIP, true);
            m_taskQue.Enqueue(p);
            m_curState = ThreadState.state_busy;
        }
        return((int)RetCode.ret_success);
    }
コード例 #4
0
    // 构建查询条件
    private IMongoQuery createImq(ParamSendMailFullSvr sendParam)
    {
        IMongoQuery imq = null;

        if (sendParam.m_condition != null)
        {
            List <IMongoQuery> queryList = new List <IMongoQuery>();

            if (sendParam.m_condition.ContainsKey("logOutTime"))
            {
                string   time = Convert.ToString(sendParam.m_condition["logOutTime"]);
                DateTime mint = DateTime.Now, maxt = DateTime.Now;
                Tool.splitTimeStr(time, ref mint, ref maxt);
                IMongoQuery imq1 = Query.LT("logout_time", BsonValue.Create(maxt));
                IMongoQuery imq2 = Query.GTE("logout_time", BsonValue.Create(mint));
                queryList.Add(Query.And(imq1, imq2));
            }

            if (sendParam.m_condition.ContainsKey("vipLevel"))
            {
                List <int> range    = new List <int>();
                string     rangeStr = Convert.ToString(sendParam.m_condition["vipLevel"]);
                Tool.parseNumList(rangeStr, range);

                int         leftVal  = Math.Min(range[0], range[1]);
                int         rightVal = Math.Max(range[0], range[1]);
                IMongoQuery imq1     = Query.LTE("VipLevel", rightVal);
                IMongoQuery imq2     = Query.GTE("VipLevel", leftVal);
                queryList.Add(Query.And(imq1, imq2));
            }

            if (queryList.Count > 0)
            {
                imq = Query.And(queryList);
            }
        }

        return(imq);
    }
コード例 #5
0
    private void sendMail(ParamSendMailFullSvr sendParam)
    {
        BsonDocument mailItem = null;

        if (sendParam.m_itemList != "")
        {
            List <ParamItem> tmpItem = new List <ParamItem>();
            Tool.parseItemList(sendParam.m_itemList, tmpItem);

            Dictionary <string, object> dd = new Dictionary <string, object>();
            for (int i = 0; i < tmpItem.Count; i++)
            {
                Dictionary <string, object> tmpd = new Dictionary <string, object>();
                tmpd.Add("giftId", tmpItem[i].m_itemId);
                tmpd.Add("count", tmpItem[i].m_itemCount);
                tmpd.Add("receive", false);
                dd.Add(i.ToString(), tmpd.ToBsonDocument());
            }
            mailItem = dd.ToBsonDocument();
        }

        DateTime now = DateTime.Now;
        DateTime nt  = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second);

        int skip = 0;
        List <Dictionary <string, object> > data    = null;
        List <Dictionary <string, object> > docList = new List <Dictionary <string, object> >();

        int serverId = DBMgr.getInstance().getDbId(sendParam.m_dbServerIP);

        if (serverId == -1)
        {
            LogMgr.error("sendMail,找不到 dbIP={0} 相关信息", sendParam.m_dbServerIP);
            return;
        }

        IMongoQuery imq = createImq(sendParam);

        while (true)
        {
            data = ExportExcelBase.nextData(ref skip, 1000, imq, TableName.PLAYER_INFO, serverId, DbName.DB_PLAYER, m_playerFields);
            if (data == null)
            {
                break;
            }

            docList.Clear();
            for (int i = 0; i < data.Count; i++)
            {
                if (!data[i].ContainsKey("player_id"))
                {
                    continue;
                }

                Dictionary <string, object> tmp = new Dictionary <string, object>();
                tmp.Add("title", sendParam.m_title);
                tmp.Add("sender", sendParam.m_sender);
                tmp.Add("content", sendParam.m_content);

                tmp.Add("time", nt);
                tmp.Add("deadTime", nt.AddDays(sendParam.m_validDay));
                tmp.Add("isReceive", false);
                tmp.Add("playerId", Convert.ToInt32(data[i]["player_id"]));

                if (mailItem != null)
                {
                    tmp.Add("gifts", mailItem);
                }
                docList.Add(tmp);
            }

            DBMgr.getInstance().insertData(TableName.PLAYER_MAIL, docList, serverId, DbName.DB_PLAYER);
        }
    }