social_msg.go 12 KB

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