You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
289 lines
9.6 KiB
Lua
289 lines
9.6 KiB
Lua
local skynet = require "skynet"
|
|
local mongohelper = require "mongohelper"
|
|
local keysutils = require "keysutils"
|
|
local dateutils = require "dateutils"
|
|
local utils = require "utils"
|
|
local redis = require 'skynet.db.redis'
|
|
local mongo = require 'skynet.db.mongo'
|
|
local settings = require "settings"
|
|
local maillogic = require "maillogic"
|
|
local cjson = require "cjson"
|
|
local redishelper = require "redishelper"
|
|
local skynet_node_name = ...
|
|
require "skynet.manager"
|
|
require "functions"
|
|
local rediscli
|
|
local lasttime
|
|
|
|
local CMD = {}
|
|
|
|
--发送邮件
|
|
function CMD.sendmail(uid, mail)
|
|
local ok = mongohelper.insert(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, mail)
|
|
local ok = skynet.send(".msgd", "lua", "sendmail", uid, mail)
|
|
return "ok"
|
|
end
|
|
|
|
function CMD.loadmail(uid)
|
|
local mails = mongohelper.find(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, {receiver=uid}, nil, {status=1, id=-1})
|
|
return mails
|
|
end
|
|
|
|
|
|
function CMD.readmail(id, data)
|
|
return mongohelper.upsert(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, {["$set"]=data}, {id=id})
|
|
end
|
|
|
|
function CMD.readallmail(uid, tp, data)
|
|
return mongohelper.updateMany(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, {["$set"]=data}, {receiver=uid, tp=tp})
|
|
end
|
|
|
|
function CMD.delone(id)
|
|
return mongohelper.del(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, {id=id})
|
|
end
|
|
|
|
function CMD.delreadall(uid, tp)
|
|
return mongohelper.del(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, {receiver=uid, tp=tp, status=1})
|
|
end
|
|
|
|
|
|
function CMD.loadroommail(uid)
|
|
local mails = {}
|
|
mails.mails1 = mongohelper.find(settings.roommail_mongodb_key.tname, settings.roommail_mongodb_key.cname, {receiver=uid, tp=1}, nil, {id=-1})
|
|
mails.mails2 = mongohelper.find(settings.roommail_mongodb_key.tname, settings.roommail_mongodb_key.cname, {receiver=uid, tp=2}, nil, {id=-1})
|
|
return mails
|
|
end
|
|
|
|
function CMD.readroommailbyid(uid, id)
|
|
return mongohelper.upsert(settings.roommail_mongodb_key.tname, settings.roommail_mongodb_key.cname, {["$set"]={status=1}}, {receiver=uid, id=id})
|
|
end
|
|
|
|
function CMD.readroommailall(uid)
|
|
return mongohelper.updateMany(settings.roommail_mongodb_key.tname, settings.roommail_mongodb_key.cname, {["$set"]={status=1}}, {receiver=uid})
|
|
end
|
|
|
|
function CMD.delroommailbyid(uid, id)
|
|
return mongohelper.del(settings.roommail_mongodb_key.tname, settings.roommail_mongodb_key.cname, {receiver=uid, id=id})
|
|
end
|
|
|
|
function CMD.delroommail(uid)
|
|
return mongohelper.del(settings.roommail_mongodb_key.tname, settings.roommail_mongodb_key.cname, {receiver=uid})
|
|
end
|
|
|
|
function CMD.checksend(uid)
|
|
local k = keysutils.user_mail_daywelfare_key(settings.appname, uid, dateutils.getday())
|
|
return redishelper.exec("get", uid, k)
|
|
end
|
|
|
|
function CMD.baoxiangactivity(uid, rewards)
|
|
local mail = {}
|
|
local id = skynet.call(".id_service", "lua", "genid", "mail")
|
|
mail.id=id
|
|
mail.tp="system"
|
|
mail.sender=10101
|
|
mail.temp="Y"
|
|
mail.receiver=uid
|
|
mail.params={}
|
|
mail.status=0 --未读
|
|
mail.title=10036
|
|
mail.content=10037
|
|
mail.rewards = table.array(rewards)
|
|
mail.created_at=dateutils.get_datetime()
|
|
local ok = mongohelper.insert(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, mail)
|
|
skynet.send(".msgd", "lua", "sendmail", uid, mail)
|
|
return "ok"
|
|
end
|
|
|
|
function CMD.zhaomuactivity(uid, rewards)
|
|
local mail = {}
|
|
local id = skynet.call(".id_service", "lua", "genid", "mail")
|
|
mail.id=id
|
|
mail.tp="system"
|
|
mail.sender=10101
|
|
mail.temp="Y"
|
|
mail.receiver=uid
|
|
mail.params={}
|
|
mail.status=0 --未读
|
|
mail.title=10034
|
|
mail.content=10035
|
|
mail.rewards = table.array(rewards)
|
|
mail.created_at=dateutils.get_datetime()
|
|
local ok = mongohelper.insert(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, mail)
|
|
skynet.send(".msgd", "lua", "sendmail", uid, mail)
|
|
return "ok"
|
|
end
|
|
|
|
function CMD.newusermail(uid)
|
|
local k = keysutils.user_newuser_mail_key(settings.appname, uid, "1")
|
|
local result = redishelper.exec("get", uid, k)
|
|
if not result then
|
|
local mail = {}
|
|
local id = skynet.call(".id_service", "lua", "genid", "mail")
|
|
mail.id=id
|
|
mail.tp="game"
|
|
mail.sender=10101
|
|
mail.temp="Y"
|
|
mail.receiver=uid
|
|
mail.params={}
|
|
mail.status=0 --未读
|
|
mail.title=10050
|
|
mail.content=10051
|
|
mail.rewards = table.array({})
|
|
mail.created_at=dateutils.get_datetime()
|
|
local ok = mongohelper.insert(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, mail)
|
|
skynet.send(".msgd", "lua", "sendmail", uid, mail)
|
|
end
|
|
redishelper.exec("set", uid, k, 1)
|
|
return "ok"
|
|
end
|
|
|
|
--每日福利
|
|
function CMD.senddaywelfaremail(uid)
|
|
local k = keysutils.user_mail_daywelfare_key(settings.appname, uid, dateutils.getday())
|
|
local result = redishelper.exec("get", uid, k)
|
|
if not result then
|
|
local mail = {}
|
|
local id = skynet.call(".id_service", "lua", "genid", "mail")
|
|
mail.id=id
|
|
mail.tp="system"
|
|
mail.sender=10101
|
|
mail.temp="Y"
|
|
mail.receiver=uid
|
|
mail.params={}
|
|
mail.status=0 --未读
|
|
mail.title=10026
|
|
mail.content=10026
|
|
mail.rewards = {
|
|
{key="box_lv1", value=10},
|
|
{key="box_lv2", value=2},
|
|
{key="gold", value=288}
|
|
}
|
|
mail.created_at=dateutils.get_datetime()
|
|
local ok = mongohelper.insert(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, mail)
|
|
skynet.send(".msgd", "lua", "sendmail", uid, mail)
|
|
end
|
|
redishelper.exec("set", uid, k, 1, "ex", dateutils.getdayex())
|
|
return "ok"
|
|
end
|
|
|
|
local function do_func(data)
|
|
local mail = {}
|
|
if data.data.type == "arena_day" then
|
|
local id = skynet.call(".id_service", "lua", "genid", "mail")
|
|
mail.id=id
|
|
mail.tp="system"
|
|
mail.sender=10101
|
|
mail.temp="Y"
|
|
mail.receiver=data.data.receiver.uid
|
|
mail.params={data.data.receiver.rank}
|
|
mail.status=0 --未读
|
|
mail.title=10026
|
|
mail.content=10027
|
|
mail.rewards = table.array({})
|
|
mail.created_at=dateutils.get_datetime()
|
|
elseif data.data.type == "arena_week" then
|
|
local id = skynet.call(".id_service", "lua", "genid", "mail")
|
|
mail.id=id
|
|
mail.tp="system"
|
|
mail.sender=10101
|
|
mail.temp="Y"
|
|
mail.receiver=data.data.receiver.uid
|
|
mail.params={data.data.receiver.rank}
|
|
mail.status=0 --未读
|
|
mail.title=10028
|
|
mail.content=10029
|
|
mail.rewards = table.array({})
|
|
mail.created_at=dateutils.get_datetime()
|
|
elseif data.data.type == "admin" then
|
|
if data.data.data.receiver ~= 0 then
|
|
local id = skynet.call(".id_service", "lua", "genid", "mail")
|
|
mail.id=id
|
|
mail.tp="system"
|
|
mail.sender=data.data.data.sender
|
|
mail.temp="N"
|
|
mail.receiver=data.data.data.receiver
|
|
mail.params={}
|
|
mail.status=0 --未读
|
|
mail.title=data.data.data.title
|
|
mail.content=data.data.data.content
|
|
mail.rewards = table.array(data.data.data.rewards)
|
|
mail.created_at=dateutils.get_datetime()
|
|
else
|
|
mail.tp="system"
|
|
mail.sender=data.data.data.sender
|
|
mail.temp="N"
|
|
mail.receiver=0
|
|
mail.params={}
|
|
mail.status=0 --未读
|
|
mail.title=data.data.data.title
|
|
mail.content=data.data.data.content
|
|
mail.rewards = table.array(data.data.data.rewards)
|
|
mail.created_at=dateutils.get_datetime()
|
|
local ok = pcall(skynet.call, ".usercenterd", "lua", "send2all", mail)
|
|
return "ok"
|
|
end
|
|
end
|
|
local ok = mongohelper.insert(settings.mail_mongodb_key.tname, settings.mail_mongodb_key.cname, mail)
|
|
skynet.send(".msgd", "lua", "sendmail", data.data.data.receiver, mail)
|
|
return "ok"
|
|
end
|
|
|
|
local function lpoprpush(queue, queuebakup)
|
|
local script = [[
|
|
local v = redis.call('lpop', ARGV[1])
|
|
if not v then
|
|
return nil
|
|
end
|
|
redis.call('rpush', ARGV[2], v)
|
|
return v
|
|
]]
|
|
local t = rediscli:eval(script, 2, "k2", "k1", queuebakup, queue)
|
|
return t
|
|
end
|
|
|
|
local function copyback(queue, queuebakup)
|
|
local t = lpoprpush(queue, queuebakup)
|
|
while t do
|
|
t = lpoprpush(queue, queuebakup)
|
|
end
|
|
end
|
|
|
|
skynet.start(function()
|
|
skynet.dispatch("lua", function(_, _, command, ...)
|
|
local f = assert(CMD[command])
|
|
skynet.retpack(f(...))
|
|
end)
|
|
|
|
rediscli = redis.connect(settings.db_cnf[skynet_node_name].redismq_cnf)
|
|
local k1 = settings.mail_queue_key
|
|
local k2 = settings.mail_queue_key_backup
|
|
copyback(k1, k2)
|
|
skynet.fork(function()
|
|
while true do
|
|
if rediscli then
|
|
local res = rediscli:brpoplpush(k1, k2, 10)
|
|
if res then
|
|
DEBUG(" mail info = ", res)
|
|
local ok, ret = pcall(cjson.decode, res)
|
|
if ok then
|
|
local r = do_func(ret)
|
|
if r then
|
|
rediscli:lrem(k2, -1, res)
|
|
else
|
|
|
|
end
|
|
end
|
|
end
|
|
if not lasttime or lasttime < os.time() - 10 then
|
|
lasttime = os.time()
|
|
rediscli:ping()
|
|
end
|
|
else
|
|
skynet.sleep(1000)
|
|
end
|
|
end
|
|
end)
|
|
collectgarbage()
|
|
skynet.register('.' .. SERVICE_NAME)
|
|
end)
|