Blame view

src/services/capsuled.lua 6 KB
555f745e   zhangqijia   feat: 一番赏
1
2
3
4
5
  require "ProtocolCode"
  require "shared.init"
  require "GlobalVar"
  require "RedisKeys"
  require "skynet.manager"
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
6
  skynet = require "skynet"
555f745e   zhangqijia   feat: 一番赏
7
8
9
10
11
12
13
14
15
16
17
18
  csvdb = require "shared.csvdata"
  redisproxy = require "shared.redisproxy"
  datacenter = require "skynet.datacenter"
  
  local capsules = {}
  local CMD = {}
  
  NotifyChangeType = {
      JOIN = 1,
      EXIT = 2,
      DRAW = 3,
      SPECIAL = 4,
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
19
20
21
22
23
24
25
  }
  
  skynet.register_protocol {
      name = "role",
      id = 101,
      pack = skynet.pack,
      unpack = skynet.unpack,
555f745e   zhangqijia   feat: 一番赏
26
27
  }
  
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
28
  local function rpcRole(roleId, funcName, ...)
555f745e   zhangqijia   feat: 一番赏
29
30
      local fields = ...
      local agent = datacenter.get("agent", roleId)
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
31
32
33
34
35
36
      if agent and agent.serv then
          if funcName == "getProperties" then
              return true, skynet.call(agent.serv, "role", funcName, fields)
          else
              return true, skynet.call(agent.serv, "role", funcName, ...)
          end
555f745e   zhangqijia   feat: 一番赏
37
      else
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
38
39
40
41
42
43
          local roleCross = require("models.RoleCross")
          if funcName == "getProperties" then
              return false, roleCross.handle(funcName, roleId, fields)
          else
              return false, roleCross.handle(funcName, roleId, ...)
          end
555f745e   zhangqijia   feat: 一番赏
44
45
46
      end
  end
  
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
47
  function getNameByRoleId(roleId)
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
48
49
      local status, name = rpcRole(roleId, "getProperty", "name")
      return name
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
50
51
52
  
  end
  
555f745e   zhangqijia   feat: 一番赏
53
54
55
56
57
58
59
60
61
62
63
64
  function broadCastCapsule(roleId, capsuleId, broadInfo)
      local capsule = capsules[capsuleId] or {}
      local register = capsule:getProperty("register") or {}
      if next(capsule) then
          for id, _ in pairs(register) do
              if id ~= roleId then
                  rpcRole(id, "SendPacket", actionCodes.Capsule_notifyChange, MsgPack.pack(broadInfo)) 	-- 通知对方
              end
          end
      end
  end
  
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
65
66
67
68
69
70
71
72
73
74
  function broadCastSpecial(roleId, capsuleId, broadInfo)
      local capsule = capsules[capsuleId] or {}
      local register = capsule:getProperty("register") or {}
      if next(capsule) then
          for id, _ in pairs(register) do
              if id ~= roleId then
                  rpcRole(id, "paySpecialReward", id, broadInfo)
              end
          end
      end
555f745e   zhangqijia   feat: 一番赏
75
76
  end
  
555f745e   zhangqijia   feat: 一番赏
77
  local function add(roleId, capsuleId)
555f745e   zhangqijia   feat: 一番赏
78
79
80
      local capsule = capsules[capsuleId] or {}
      if next(capsule) then
          capsule:join(roleId)
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
81
          broadCastCapsule(roleId, capsuleId, {notifyType= NotifyChangeType.JOIN, roleId = roleId})
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
82
          return capsule:data(roleId)
555f745e   zhangqijia   feat: 一番赏
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
      end
      print("id 不存在: ".. capsuleId)
      return nil
  end
  
  local function capsuleRefreshing()
      for _, v in pairs(capsules) do
          if v:refreshing() then
              v:init()
              v:create()
          end
      end
  end
  
  --扭蛋机刷新
  local function check_capsules()
      pcall(capsuleRefreshing)
      skynet.timeout(60, check_capsules)
  end
  
  function CMD.start()
      local now = skynet.timex()
      local res = redisproxy:smembers(CAPSULE_INFO) or {}
      for _, key in pairs(res) do
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
107
          local capsule = require("models.Capsule").new({ key = CAPSULE_PUBLIC:format(key)})
555f745e   zhangqijia   feat: 一番赏
108
109
110
111
112
113
114
115
          capsule:load()
          if capsule:isShow() then
              if capsule:refreshing(now) then
                  capsule:init()
                  capsule:create()
              end
              capsules[key] = capsule
          else
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
116
              redisproxy:del(CAPSULE_PUBLIC:format(key))
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
117
              redisproxy:srem(CAPSULE_INFO, key)
555f745e   zhangqijia   feat: 一番赏
118
119
120
121
122
123
          end
      end
  
      for _, data in pairs(csvdb["ichibankuji_mainCsv"]) do
          for _, val in ipairs(data) do
              if val.type == 1 then
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
124
                  local key = val.id..val.room
555f745e   zhangqijia   feat: 一番赏
125
                  if not capsules[key] then
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
126
                      local capsule = require("models.Capsule").new({ key = CAPSULE_PUBLIC:format(key), id= val.id, room = val.room, typ = 1, name=val.name})
555f745e   zhangqijia   feat: 一番赏
127
128
129
                      capsule:init()
                      capsule:create()
                      capsules[key] = capsule
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
130
                      redisproxy:sadd(CAPSULE_INFO, key)
555f745e   zhangqijia   feat: 一番赏
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
                  end
              end
          end
      end
  
      check_capsules()
  end
  
  function CMD.list(coin)
      local tmpCapsules = {}
      for k, v in pairs(capsules) do
          if v:getProperty("coin") == coin then
              local onlineCount= v:getOnlineCount()
              tmpCapsules[k] = {id=v:getProperty("id"), room=v:getProperty("room"), typ=v:getProperty("typ"), people=onlineCount[2], coin= v:getProperty("coin")}
          end
      end
      return tmpCapsules
  end
  
  function CMD.join(roleId, capsuleId)
      if capsuleId then
          return add(roleId, capsuleId)
      end
      return nil
  end
  
  
  function CMD.exit(roleId, capsuleId)
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
159
160
161
162
      if capsuleId then
          local capsule = capsules[capsuleId] or {}
          if next(capsule) then
              capsule:exit(roleId)
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
163
              broadCastCapsule(roleId, capsuleId, {notifyType = NotifyChangeType.EXIT, roleId = roleId})
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
164
165
166
167
168
          end
      else
          for _, capsule in pairs(capsules) do
              if next(capsule) then
                  capsule:exit(roleId)
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
169
                  broadCastCapsule(roleId, capsuleId, {notifyType = NotifyChangeType.EXIT, roleId = roleId})
d10a9a36   zhangqijia   fix: 一番赏增加通知信息的数据...
170
171
              end
          end
555f745e   zhangqijia   feat: 一番赏
172
173
174
      end
  end
  
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
175
  function CMD.draw_capsule(roleId, capsuleId, full, drawsNum, cares)
555f745e   zhangqijia   feat: 一番赏
176
177
      local capsule = capsules[capsuleId] or {}
      if next(capsule) then
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
178
179
180
181
182
          local ret, reward, rewardByGoods, notify = capsule:draw(roleId, full, drawsNum, cares)
          if ret > 5 then
              --broadCastCapsule(roleId, capsuleId, {notifyType = NotifyChangeType.DRAW, notify = notify})
              broadCastSpecial(roleId, capsuleId, notify)
          end
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
183
          return ret, reward, rewardByGoods, capsule:data(roleId)
555f745e   zhangqijia   feat: 一番赏
184
      end
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
185
      return 2
555f745e   zhangqijia   feat: 一番赏
186
187
  end
  
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
188
189
  function CMD.register(roleId, capsuleId)
      local capsule = capsules[capsuleId] or {}
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
190
191
192
193
194
195
196
197
      return capsule:register(roleId)
  end
  
  function CMD.goods_stock(capsuleId)
      local capsule = capsules[capsuleId] or {}
      return capsule:getGoodsAmount(), capsule:getProperty("token")
  end
  
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
198
  function CMD.capsule_data(roleId, capsuleId)
0eb317fb   zhangqijia   fix: 一番赏奖励抽奖的bug与...
199
      local capsule = capsules[capsuleId] or {}
0a421d34   zhangqijia   fix: 一番赏奖励 刷新协议缺少...
200
      return capsule:data(roleId)
f382b4f2   zhangqijia   fix: 一番赏的抽奖bug
201
202
  end
  
555f745e   zhangqijia   feat: 一番赏
203
204
205
206
207
208
209
  skynet.start(function()
      skynet.dispatch("lua", function(session, address, cmd, ...)
          local f = CMD[string.lower(cmd)]
          skynet.ret(skynet.pack(f(...)))
      end)
  
      skynet.register("capsuled")
cd2a7a67   zhangqijia   fix: 一番赏奖励中加入得奖者的...
210
      globalCsv = csvdb["GlobalDefineCsv"]
555f745e   zhangqijia   feat: 一番赏
211
  end)