social_msg.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. package msg
  2. import (
  3. "rocommon"
  4. "rocommon/util"
  5. "roserver/baseserver/model"
  6. model2 "roserver/game/model"
  7. "roserver/serverproto"
  8. )
  9. func init() {
  10. //webgm
  11. serverproto.Handle_GAME_SSWebGMBanNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  12. msg := ev.Msg().(*serverproto.SSWebGMBanNtf)
  13. util.InfoF("receive SSWebGMBanNtf msg=%v", msg)
  14. banRole := model2.RoleMag.GetRoleFromUUid(msg.BanUid)
  15. if banRole == nil {
  16. banRole = model2.RoleMag.GetRoleFromOffline(msg.BanUid)
  17. }
  18. if banRole != nil {
  19. if msg.BanType == 1 {
  20. banRole.BanRole(msg.IsBan, msg.BanTime, model2.CheatType_GMWEB)
  21. } else if msg.BanType == 2 {
  22. banRole.BanRoleChat(msg.IsBan, msg.BanTime, model2.CheatType_GMWEB)
  23. }
  24. }
  25. })
  26. //来自webgm的走马灯公告
  27. serverproto.Handle_GAME_SSWebGMNoticeNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  28. msg := ev.Msg().(*serverproto.SSWebGMNoticeNtf)
  29. util.InfoF("receive SSWebGMNoticeNtf msg=%v", msg)
  30. model2.RoleMag.SetGMNoticeInfo(msg)
  31. })
  32. //gmweb->social->game 服务器维护(强制所有玩家下线)
  33. serverproto.Handle_GAME_SSWEBGMServerMaintainNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  34. msg := ev.Msg().(*serverproto.SSWEBGMServerMaintainNtf)
  35. util.InfoF("receive SSWEBGMServerMaintainNtf msg=%v", msg)
  36. model2.RoleMag.ServerMaintain(msg.State)
  37. })
  38. //gmweb->social->all game 服务器配置文件热加载
  39. serverproto.Handle_GAME_SSServerConfigReloadNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  40. msg := ev.Msg().(*serverproto.SSServerConfigReloadNtf)
  41. util.InfoF("receive SSServerConfigReloadNtf msg=%v", msg)
  42. model2.ServerReloadConfig(msg.CfgList)
  43. model2.RoleMag.ServerReloadConfigNtf(msg.CfgList)
  44. })
  45. //gmweb->social->all game 背包内道具删除
  46. serverproto.Handle_GAME_SSWebGMDelItemNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  47. msg := ev.Msg().(*serverproto.SSWebGMDelItemNtf)
  48. util.InfoF("receive SSWebGMDelItemNtf msg=%v", msg)
  49. role := model2.RoleMag.GetRoleFromUUid(msg.Uid)
  50. if role == nil {
  51. role = model2.RoleMag.GetRoleFromOffline(msg.Uid)
  52. }
  53. if role != nil {
  54. role.(*model2.Role).WebGMDelItem(msg.DelItemList)
  55. }
  56. })
  57. //webgm
  58. //获取好友系统列表信息(不包括推荐列表信息)
  59. serverproto.Handle_GAME_CSFriendReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  60. msg := ev.Msg().(*serverproto.CSFriendReq)
  61. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  62. if role == nil {
  63. return
  64. }
  65. util.InfoF("uid=%v receive CSFriendReq msg=%v", role.GetUUid(), msg)
  66. role.(model2.RoleSocialOuter).FriendReq(msg.Type)
  67. })
  68. //添加关注(添加好友,这边添加好友是单向的)
  69. serverproto.Handle_GAME_CSFriendAddReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  70. msg := ev.Msg().(*serverproto.CSFriendAddReq)
  71. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  72. if role == nil {
  73. return
  74. }
  75. util.InfoF("uid=%v receive CSFriendAddReq msg=%v", role.GetUUid(), msg)
  76. role.(model2.RoleSocialOuter).FriendAdd(msg.AddUid)
  77. })
  78. //from social 根据错误码处理发送关注失败,放到db中做处理
  79. serverproto.Handle_GAME_SSFriendAddAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  80. msg := ev.Msg().(*serverproto.SSFriendAddAck)
  81. role := model2.RoleMag.GetRoleFromUUid(msg.FromUid)
  82. if role == nil {
  83. role = model2.RoleMag.GetRoleFromOffline(msg.FromUid)
  84. if role == nil {
  85. return
  86. }
  87. }
  88. util.InfoF("uid=%v receive SSFriendAddAck msg=%v", role.GetUUid(), msg)
  89. //social未找到直接发送给db处理
  90. if msg.Error == int32(serverproto.ErrorCode_ERROR_SOCIAL_NOT_FIND_SERVICE_ID) {
  91. ssDBReqMsg := &serverproto.SSDBFriendAddFansReq{
  92. FromUid: msg.FromUid,
  93. AddUid: msg.AddUid.Uid,
  94. }
  95. role.(*model2.Role).SendDb(ssDBReqMsg)
  96. } else if msg.Error != int32(serverproto.ErrorCode_ERROR_OK) {
  97. //添加关注不成功
  98. ackMsg := serverproto.SCFriendAddAck{
  99. Error: msg.Error,
  100. }
  101. role.ReplayGate(ackMsg, true)
  102. } else {
  103. //添加对方的粉丝列表成功
  104. role.(*model2.Role).GetRoleSocial().HandlerSubList(true, msg.AddUid.Uid, msg.AddUid)
  105. }
  106. })
  107. //from db添加到对方粉丝列表消息回复
  108. serverproto.Handle_GAME_SSDBFriendAddFansAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  109. msg := ev.Msg().(*serverproto.SSDBFriendAddFansAck)
  110. util.InfoF("receive SSDBFriendAddFansAck msg=%v", msg)
  111. role := model2.RoleMag.GetRole(cliId)
  112. if role == nil {
  113. return
  114. }
  115. if msg.Error == int32(serverproto.ErrorCode_ERROR_OK) {
  116. role.(*model2.Role).GetRoleSocial().HandlerSubList(true, msg.AddUid.Uid, msg.AddUid)
  117. } else {
  118. ackMsg := &serverproto.SCFriendAddAck{
  119. Error: msg.Error,
  120. }
  121. role.ReplayGate(ackMsg, true)
  122. }
  123. })
  124. //from social来自其他服务器的添加关注请求
  125. serverproto.Handle_GAME_SSFriendAddReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  126. msg := ev.Msg().(*serverproto.SSFriendAddReq)
  127. util.InfoF("receive SSFriendAddReq msg=%v", msg)
  128. addRole := model2.RoleMag.GetRoleFromUUid(msg.AddUid)
  129. if addRole == nil {
  130. addRole = model2.RoleMag.GetRoleFromOffline(msg.AddUid)
  131. }
  132. //角色信息未找到,返回social并返回game,交给db处理
  133. if addRole == nil {
  134. ackMsg := &serverproto.SSFriendAddAck{
  135. Error: int32(serverproto.ErrorCode_ERROR_SOCIAL_NOT_FIND_SERVICE_ID),
  136. FromUid: msg.FromUid.Uid,
  137. AddUid: &serverproto.CommonPlayerBriefInfo{Uid: msg.AddUid},
  138. }
  139. model.ServiceReplay(ev, ackMsg)
  140. } else {
  141. ackMsg := &serverproto.SSFriendAddAck{
  142. Error: int32(serverproto.ErrorCode_ERROR_OK),
  143. FromUid: msg.FromUid.Uid,
  144. }
  145. addRoleSocial := addRole.(*model2.Role).GetRoleSocial()
  146. ret := addRoleSocial.CanAddFansList(msg.FromUid.Uid)
  147. if ret != serverproto.ErrorCode_ERROR_OK {
  148. ackMsg.AddUid = &serverproto.CommonPlayerBriefInfo{Uid: msg.AddUid}
  149. } else {
  150. addRoleSocial.HandlerFansList(true, msg.FromUid.Uid, msg.FromUid)
  151. addRoleBfInfo := &serverproto.CommonPlayerBriefInfo{}
  152. addRole.(*model2.Role).GetRoleBriefInfo(addRoleBfInfo)
  153. ackMsg.AddUid = addRoleBfInfo
  154. }
  155. model.ServiceReplay(ev, ackMsg)
  156. }
  157. })
  158. //取消关注
  159. serverproto.Handle_GAME_CSFriendDelReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  160. msg := ev.Msg().(*serverproto.CSFriendDelReq)
  161. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  162. if role == nil {
  163. return
  164. }
  165. util.InfoF("uid=%v receive CSFriendDelReq ms=%v", role.GetUUid(), msg)
  166. role.(model2.RoleSocialOuter).FriendDel(msg.DelUid)
  167. })
  168. //from social在social上没有找到对应玩家信息
  169. serverproto.Handle_GAME_SSFriendDelAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  170. msg := ev.Msg().(*serverproto.SSFriendDelAck)
  171. util.InfoF("receive SSFriendDelAck msg=%v", msg)
  172. //role := model2.RoleMag.GetRole(cliId)
  173. //if role == nil {
  174. // return
  175. //}
  176. //role.(model2.RoleSocialOuter).FriendDel(msg.DelUid)
  177. delRole := model2.RoleMag.GetRoleFromUUid(msg.DelUid)
  178. if delRole == nil {
  179. delRole = model2.RoleMag.GetRoleFromOffline(msg.DelUid)
  180. }
  181. //数据库操作
  182. if delRole == nil {
  183. ssDBMsg := &serverproto.SSDBFriendDelFansNtf{
  184. FromUid: msg.FromUid,
  185. DelUid: msg.DelUid,
  186. }
  187. model2.SendDb(ssDBMsg)
  188. } else {
  189. delRole.(*model2.Role).GetRoleSocial().HandlerFansList(false, msg.FromUid, nil)
  190. }
  191. })
  192. //from social来自其他game服务器的删除粉丝列表请求(从delUid中移除粉丝fromUid)
  193. serverproto.Handle_GAME_SSFriendDelReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  194. msg := ev.Msg().(*serverproto.SSFriendDelReq)
  195. util.InfoF("receive SSFriendDelReq msg=%v", msg)
  196. delRole := model2.RoleMag.GetRoleFromUUid(msg.DelUid)
  197. if delRole == nil {
  198. delRole = model2.RoleMag.GetRoleFromOffline(msg.DelUid)
  199. }
  200. //数据库操作
  201. if delRole == nil {
  202. ssDBMsg := &serverproto.SSDBFriendDelFansNtf{
  203. FromUid: msg.FromUid,
  204. DelUid: msg.DelUid,
  205. }
  206. model2.SendDb(ssDBMsg)
  207. } else {
  208. delRole.(*model2.Role).GetRoleSocial().HandlerFansList(false, msg.FromUid, nil)
  209. }
  210. })
  211. //添加/删除屏蔽名单(添加和删除同一条协议,不在黑名单中加入黑名单,在黑名单中移除黑名单)
  212. serverproto.Handle_GAME_CSFriendBlackReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  213. msg := ev.Msg().(*serverproto.CSFriendBlackReq)
  214. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  215. if role == nil {
  216. return
  217. }
  218. util.InfoF("uid=%v receive CSFriendBlackReq msg=%v", role.GetUUid(), msg)
  219. role.(model2.RoleSocialOuter).FriendBlack(msg.BlackUid)
  220. })
  221. //获取推荐好友列表
  222. serverproto.Handle_GAME_CSFriendRecommendReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  223. msg := ev.Msg().(*serverproto.CSFriendRecommendReq)
  224. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  225. if role == nil {
  226. return
  227. }
  228. util.InfoF("uid=%v receive CSFriendRecommendReq msg=%v", role.GetUUid(), msg)
  229. role.(model2.RoleSocialOuter).FriendRecommend()
  230. })
  231. //搜索玩家
  232. serverproto.Handle_GAME_CSFriendSearchReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  233. msg := ev.Msg().(*serverproto.CSFriendSearchReq)
  234. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  235. if role == nil {
  236. return
  237. }
  238. util.InfoF("uid=%v receive CSFriendSearchReq msg=%v", role.GetUUid(), msg)
  239. role.(model2.RoleSocialOuter).FriendSearch(msg.TargetName)
  240. })
  241. //from db
  242. serverproto.Handle_GAME_SSGetUidByRoleNameAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  243. msg := ev.Msg().(*serverproto.SSGetUidByRoleNameAck)
  244. util.InfoF("receive SSGetUidByRoleNameAck msg=%v", msg)
  245. role := model2.RoleMag.GetRole(cliId)
  246. if role == nil {
  247. return
  248. }
  249. ssMsg := &serverproto.SSOnlineStateReq{
  250. ProType: 1, //表示search操作
  251. BriefInfoList: append(msg.BriefInfoList),
  252. }
  253. if len(msg.BriefInfoList) > 0 {
  254. role.(*model2.Role).SendSocial(ssMsg)
  255. } else {
  256. ackMsg := &serverproto.SCFriendSearchAck{
  257. Error: int32(serverproto.ErrorCode_ERROR_OK),
  258. }
  259. role.ReplayGate(ackMsg, true)
  260. }
  261. })
  262. //from social
  263. serverproto.Handle_GAME_SSOnlineStateAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  264. msg := ev.Msg().(*serverproto.SSOnlineStateAck)
  265. util.InfoF("receive SSOnlineStateAck msg=%v", msg)
  266. role := model2.RoleMag.GetRole(cliId)
  267. if role == nil {
  268. return
  269. }
  270. //表示search操作
  271. if msg.ProType == 1 {
  272. ackMsg := &serverproto.SCFriendSearchAck{
  273. Error: int32(serverproto.ErrorCode_ERROR_OK),
  274. BriefInfoList: append(msg.BriefInfoList),
  275. }
  276. role.ReplayGate(ackMsg, true)
  277. } else if msg.ProType == 2 {
  278. //推荐列表
  279. if msg.ListType == int32(model2.StateTypeRecommend) {
  280. ackMsg := &serverproto.SCFriendRecommendNtf{}
  281. ackMsg.BriefInfoList = append(msg.BriefInfoList)
  282. role.ReplayGate(ackMsg, true)
  283. } else {
  284. ackMsg := &serverproto.SCGetOtherPlayerBriefInfoAck{
  285. Type: msg.ListType,
  286. }
  287. ackMsg.BriefInfo = append(msg.BriefInfoList)
  288. role.ReplayGate(ackMsg, true)
  289. }
  290. }
  291. })
  292. //from social
  293. serverproto.Handle_GAME_SSDaoChang100WheelLogAddNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  294. msg := ev.Msg().(*serverproto.SSDaoChang100WheelLogAddNtf)
  295. ntfMsg := &serverproto.SCDaoChang100WheelLogNtf{
  296. LogList: msg.LogList,
  297. }
  298. model2.RoleMag.SendMsg2OnlinePlayer(ntfMsg, 0)
  299. })
  300. serverproto.Handle_GAME_SSWebGMHeadChange = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  301. msg := ev.Msg().(*serverproto.SSWebGMHeadChange)
  302. util.InfoF("receive SSWebGMHeadChange msg=%v", msg)
  303. banRole := model2.RoleMag.GetRoleFromUUid(msg.Uid)
  304. if banRole == nil {
  305. banRole = model2.RoleMag.GetRoleFromOffline(msg.Uid)
  306. }
  307. if banRole != nil {
  308. head := banRole.(*model2.Role).GetHeadMag()
  309. if head != nil {
  310. head.SetHeadState(msg.HeadId, model2.EmHeadState(msg.State))
  311. }
  312. } else {
  313. dbmsg := &serverproto.SSUpdateHeadDataSaveReq{}
  314. dbmsg.Uid = msg.Uid
  315. dbmsg.HeadId = msg.HeadId
  316. dbmsg.State = msg.State
  317. model2.SendDb(dbmsg)
  318. }
  319. })
  320. }