package msg import ( "rocommon" "rocommon/service" "rocommon/util" "roserver/baseserver/model" "roserver/serverproto" model2 "roserver/social/model" "strings" ) func init() { //Default serverproto.Handle_SOCIAL_Default = func(ev rocommon.ProcEvent) { switch e := ev.Msg().(type) { case *serverproto.ServiceIdentifyACK: //服务器阶段断开连接 if strings.Contains(e.ServiceId, model.SERVICE_NODE_TYPE_SOCIAL_STR) { //util.InfoF("serverproto.ServiceIdentifyACK msg=%v", e.ServiceId) //连接social后获取,后启动的social获取之前正常social的在线离线状态 if !model2.InitSocialData && len(model2.SocialPlayerMag) <= 0 && len(model2.SocialOfflinePlayerMag) <= 0 { if service.GetServiceConfig().ServerStartTime < e.ServerStartTime { reqMsg := &serverproto.SSGetSocialInitDataReq{} model2.SendAllSocial(reqMsg) } } model2.InitSocialData = true } } //来自router跨服转发消息处理 switch e := ev.(type) { case *model.RecvRouterServiceMsgEvent: //来自crossrouter消息 //这边可以根据消息类型来处理不同消息的转发 if e.ClientID > 0 { socialPlayer := model2.GetSocialPlayer(e.ClientID) if socialPlayer != nil { socialPlayer.SendGame(e.Message) } } else if len(e.ClientIDList) > 0 { model2.SendToAllGameWithUidList(e.Message, e.ClientIDList) } } } //收到其他social服务器获取状态数据请求 serverproto.Handle_SOCIAL_SSGetSocialInitDataReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) { msg := ev.Msg().(*serverproto.SSGetSocialInitDataReq) util.InfoF("receive SSGetSocialInitDataReq msg:%v", msg) ackMsg := &serverproto.SSGetSocialInitDataAck{} model2.GetInitSocialData(ackMsg) if len(ackMsg.OnlinePlayerList) > 0 || len(ackMsg.OfflinePlayerList) > 0 { model.ServiceReplay(ev, ackMsg) } }) //social启动时从其他其他social获取的状态数据 serverproto.Handle_SOCIAL_SSGetSocialInitDataAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) { msg := ev.Msg().(*serverproto.SSGetSocialInitDataAck) util.InfoF("receive SSGetSocialInitDataAck msg:%v", msg) model2.InitSocialDataFromOtherSocialService(msg) }) //玩家上线通知 serverproto.Handle_SOCIAL_SSPlayerOnlineNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) { msg := ev.Msg().(*serverproto.SSPlayerOnlineNtf) util.InfoF("receive SSPlayerOnlineNtf msg:%v", msg) model2.AddSocialPlayer(msg.ServiceNode, msg.BriefInfo) ssNtfMsg := &serverproto.SSPlayerOnlineNumNtf{ OnlineNum: model2.GetSocialPlayerNum(), } //发送给其他game服务器节点 model2.SendToAllGame(ssNtfMsg) }) //玩家下线通知 serverproto.Handle_SOCIAL_SSPlayerOfflineNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) { msg := ev.Msg().(*serverproto.SSPlayerOfflineNtf) util.InfoF("receive SSPlayerOfflineNtf msg:%v", msg) model2.RemoveSocialPlayer(msg.Uid) ssNtfMsg := &serverproto.SSPlayerOnlineNumNtf{ OnlineNum: model2.GetSocialPlayerNum(), } //发送给其他game服务器节点 model2.SendToAllGame(ssNtfMsg) }) }