//------------------------------------------------------------------------- // 客户端断开连接 public async Task c2sClientDeattach() { EbLog.Note("CellPlayer.c2sClientDeattach() EtGuid=" + Entity.Guid); CachePlayerData.player_server_state = PlayerServerState.Offline; // 通知PlayerProxy,玩家离线 var grain = Entity.getUserData <GrainCellPlayer>(); var grain_playerproxy = grain.GF.GetGrain <ICellPlayerProxy>(new Guid(Entity.Guid)); grain_playerproxy.s2sPlayerServerStateChange(CachePlayerData.player_server_state); string data = EbTool.jsonSerialize(CachePlayerData); //DbClientCouchbase.Instance.asyncSave(CachePlayerKey, data, TimeSpan.FromSeconds(15.0)); await CoPlayerDesktop.leaveDesktop(); }
//------------------------------------------------------------------------- void s2cPlayerResponse(PlayerResponse player_response) { switch (player_response.id) { case PlayerResponseId.CreatePrivateDesktop: // 创建私有桌子 { EbLog.Note("ClientPlayer.s2cPlayerResponse() CreatePrivateDesktop"); } break; case PlayerResponseId.LeaveDesktop: // 离开桌子 { EbLog.Note("ClientPlayer.s2cPlayerResponse() LeaveDesktop"); CoPlayerDesktop.clearDesktop(); CoPlayerLobby.checkShowLobby(); requestGetOnlinePlayerNum(); } break; case PlayerResponseId.GetOnlinePlayerNum: // 获取在线玩家数 { var online_player_num = EbTool.protobufDeserialize <int>(player_response.data); //EbLog.Note("ClientPlayer.s2cPlayerResponse() GetOnlinePlayerNum Num=" + online_player_num); var e = EntityMgr.getDefaultEventPublisher().genEvent <EvEntitySetOnLinePlayerNum>(); e.online_num = online_player_num; e.send(null); } break; case PlayerResponseId.GetPlayerInfoOther: // 获取牌桌上其他玩家信息 { EbLog.Note("ClientPlayer.s2cPlayerResponse() GetPlayerInfoOther"); var player_info = EbTool.protobufDeserialize <PlayerInfoOther>(player_response.data); var e = EntityMgr.getDefaultEventPublisher().genEvent <EvEntityResponsePlayerInfoOther>(); e.player_info = player_info; e.send(null); _createPlayerInfoUi(player_info); //switch (mRequestPlayerInfoReason) //{ // case _eRequestPlayerInfoReason.PlayerProfile: // _createPlayerInfoUi(player_info); // break; // case _eRequestPlayerInfoReason.RequestAddFriend: // UiMbAgreeOrDisAddFriendRequest friend_request = UiMgr.Instance.getCurrentUi<UiMbAgreeOrDisAddFriendRequest>(); // if (friend_request != null) // { // friend_request.setPlayerInfo(player_info); // } // break; // case _eRequestPlayerInfoReason.ResponseAddFriend: // UiMbMsgBox msg_box = UiMgr.Instance.createUi<UiMbMsgBox>(_eUiLayer.MessgeBox, false); // msg_box.setNotifyMsgInfo("加好友", player_info.nick_name + "成为你的好友!"); // break; // case _eRequestPlayerInfoReason.GetRankPlayerInfo: // _createPlayerInfoUi(player_info); // break; // default: // break; //} } break; case PlayerResponseId.ChangeProfileSkin: // 个人资料换肤 { EbLog.Note("ClientPlayer.s2cPlayerResponse() ChangeProfileSkin"); var profileskin_tableid = EbTool.protobufDeserialize <int>(player_response.data); //FloatMsgInfo f_info; //f_info.msg = "换肤成功,请在游戏中查看!"; //f_info.color = Color.green; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } break; case PlayerResponseId.RefreshIpAddress: // 刷新Ip所在地 { EbLog.Note("ClientPlayer.s2cPlayerResponse() RefreshIpAddress"); var ip_address = EbTool.protobufDeserialize <string>(player_response.data); //UiMgr.Instance.destroyCurrentUi<UiMbWaiting>(); //FloatMsgInfo f_info; //f_info.msg = "所在地刷新成功!"; //f_info.color = Color.green; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } break; case PlayerResponseId.ReportPlayer: // 举报玩家 { EbLog.Note("ClientPlayer.s2cPlayerResponse() ReportPlayer"); var report = EbTool.protobufDeserialize <ReportPlayer>(player_response.data); //FloatMsgInfo f_info; //f_info.msg = "举报玩家成功!"; //f_info.color = Color.green; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } break; case PlayerResponseId.InvitePlayerEnterDesktop: // 邀请玩家进桌 { EbLog.Note("ClientPlayer.s2cPlayerResponse() InvitePlayerEnterDesktop"); var r = EbTool.protobufDeserialize <ProtocolResult>(player_response.data); if (r == ProtocolResult.Success) { //FloatMsgInfo f_info; //f_info.msg = "邀请好友进桌发送成功!"; //f_info.color = Color.green; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } } break; case PlayerResponseId.GivePlayerChip: // 赠送玩家筹码 { EbLog.Note("ClientPlayer.s2cPlayerResponse() GivePlayerChip"); //var r = EbTool.protobufDeserialize<ProtocolResult>(player_response.data); //FloatMsgInfo f_info; //if (r == ProtocolResult.Success) //{ // f_info.msg = "赠送玩家筹码成功!"; // f_info.color = Color.green; //} //else //{ // f_info.msg = "赠送玩家筹码失败!"; // f_info.color = Color.red; //} //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } break; default: break; } }
//------------------------------------------------------------------------- public override void handleEvent(object sender, EntityEvent e) { if (e is EvUiClickShop) { var ev = (EvUiClickShop)e; // 点击主界面商城 } else if (e is EvUiClickFriend) { var ev = (EvUiClickFriend)e; // 点击主界面好友 } else if (e is EvUiClickMsg) { var ev = (EvUiClickMsg)e; // 点击主界面消息 } else if (e is EvUiClickHelp) { var ev = (EvUiClickHelp)e; // 点击主界面帮助 } else if (e is EvUiClickEdit) { var ev = (EvUiClickEdit)e; // 点击主界面编辑 } else if (e is EvUiClickLogin) { var ev = (EvUiClickLogin)e; EbLog.Note("ClientPlayer.handleEvent() 响应点击登陆按钮消息"); // 点击主界面登陆 CoApp.CoNetMonitor.disconnect(); } else if (e is EvUiClickPlayNow) { var ev = (EvUiClickPlayNow)e; // 点击主界面立即玩 //requestPlayNow(); } //else if (e is EvUiClickCreateDeskTop) //{ // var ev = (EvUiClickCreateDeskTop)e; // // 请求创建私人牌桌 // int seat_num = ev.seat_num; // PrivateDesktopCreateInfo desktop_createinfo; // desktop_createinfo.seat_num = seat_num; // desktop_createinfo.desktop_tableid = ev.desk_topinfo_id; // desktop_createinfo.is_vip = CoActor.Def.mPropIsVIP.get(); // requestCreatePrivateDesktop(desktop_createinfo); //} else if (e is EvUiClickExitDesk) { // 点击离开桌子 requestLeaveDesktop(); } //else if (e is EvUiClickEnterDesktop) //{ // requestEnterDesktopAny(); //} //else if (e is EvUiClickGetSelfPlayerInfo) //{ // var ev = (EvUiClickGetSelfPlayerInfo)e; // // 点击主界面玩家信息 //} //else if (e is EvUiClickGetPlayerProfile) //{ // var ev = (EvUiClickGetPlayerProfile)e; // requestGetPlayerInfoOther(ev.player_etguid); // //requestGetPlayerInfo(ev.player_etguid, _eRequestPlayerInfoReason.PlayerProfile); //} else if (e is EvUiClickChangePlayerNickName) { // 改昵称 var ev = (EvUiClickChangePlayerNickName)e; requestChangeNickName(ev.new_name); } else if (e is EvUiClickChangePlayerIndividualSignature) { // 改签名 var ev = (EvUiClickChangePlayerIndividualSignature)e; requestChangeIndividualSignature(ev.new_individual_signature); } else if (e is EvUiClickChangePlayerProfileSkin) { // 换肤 var ev = (EvUiClickChangePlayerProfileSkin)e; requestChangePlayerProfileSkin(ev.skin_id); } else if (e is EvUiClickRefreshIPAddress) { // 刷新IP所在地 requestRefreshIpAddress(); } else if (e is EvUiReportFriend) { // 举报好友 var ev = (EvUiReportFriend)e; string et_guid = ev.friend_etguid; ReportPlayerType report_type = ev.report_type; requestReprotPlayer(et_guid, report_type); } else if (e is EvUiInviteFriendPlayTogether) { // 邀请好友一起玩 var ev = (EvUiInviteFriendPlayTogether)e; DesktopConfigData desktop_configdata = CoPlayerDesktop.DesktopConfigData; if (desktop_configdata != null && !string.IsNullOrEmpty(desktop_configdata.desktop_etguid)) { requestInvitePlayerEnterDesktop(ev.friend_guid, desktop_configdata.desktop_etguid, 0, 0, CoPlayerDesktop.getPlayerCount(), desktop_configdata.seat_num); } } else if (e is EvUiClickChipTransaction) { // 点击送筹码 var ev = (EvUiClickChipTransaction)e; if (CoActor.Def.PropGold.get() < 100000) { //FloatMsgInfo f_info; //f_info.msg = "筹码不足10万,不能发送!"; //f_info.color = Color.red; //UiMgr.Instance.FloatMsgMgr.createFloatMsg(f_info); } else { //UiMbChipTransaction chip_transaction = UiMgr.Instance.createUi<UiMbChipTransaction>(_eUiLayer.MessgeBox); //chip_transaction.setChipTransactionInfo(CoActor.Def.mPropChip.get(), CoActor.Def.mPropChip.get(), // 100000, CoPlayerFriend.getFriendItem(ev.send_target_etguid)); } } else if (e is EvUiCreateMainUi) { createMainUi(); } else if (e is EvUiCreateExchangeChip) { // 创建换钱UI //UiMbExchangeChip chip_transaction = UiMgr.Instance.createUi<UiMbExchangeChip>(_eUiLayer.MessgeBox); //chip_transaction.setExchangeInfo(CoActor.Def.PropGold.get(), CoActor.Def.PropGold.get(), 100); } else if (e is EvUiRequestGetRankPlayerInfo) { // 请求排行榜玩家信息 var ev = (EvUiRequestGetRankPlayerInfo)e; requestGetPlayerInfoOther(ev.player_etguid); } else if (e is EvUiRequestPlayerInfoOther) { // 请求其他玩家详细信息 var ev = (EvUiRequestPlayerInfoOther)e; requestGetPlayerInfoOther(ev.player_etguid); } }
//------------------------------------------------------------------------- async Task <MethodData> _c2sPlayerRequest(MethodData method_data) { var player_request = EbTool.protobufDeserialize <PlayerRequest>(method_data.param1); switch (player_request.id) { case PlayerRequestId.PlayNow: // 立即玩 { EbLog.Note("CellPlayer._c2sPlayerRequest PlayNow() EtGuid=" + Entity.Guid); // 通过桌子服务请求立即玩 await CoPlayerDesktop.enterDesktopPlayNow(); } break; case PlayerRequestId.CreatePrivateDesktop: // c->s,创建私有桌子 { EbLog.Note("CellPlayer.c2sPlayerRequest() CreatePrivateDesktop"); // 正在进入桌子中 if (CoPlayerDesktop.IsEntering) { goto End; } // 检测玩家是否已在桌子中 if (!string.IsNullOrEmpty(CoPlayerDesktop.DesktopEtGuid)) { goto End; } // 创建私人桌并入座 var desktop_createinfo = EbTool.protobufDeserialize <PrivateDesktopCreateInfo>(player_request.data); await CoPlayerDesktop.enterDesktopPrivate(desktop_createinfo); PlayerResponse player_response; player_response.id = PlayerResponseId.CreatePrivateDesktop; player_response.data = null; MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.EnterDesktopAny: { EbLog.Note("CellPlayer.c2sPlayerRequest EnterDesktopAny() EtGuid=" + Entity.Guid); await CoPlayerDesktop.enterDesktopPlayNow(); PlayerResponse player_response; player_response.id = PlayerResponseId.EnterDesktopAny; player_response.data = null; MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.EnterDesktop: // 进入桌子 { EbLog.Note("CellPlayer.c2sPlayerRequest EnterDesktop() EtGuid=" + Entity.Guid); var desktop_etguid = EbTool.protobufDeserialize <string>(player_request.data); if (!string.IsNullOrEmpty(desktop_etguid)) { await CoPlayerDesktop.enterDesktop(desktop_etguid); } PlayerResponse player_response; player_response.id = PlayerResponseId.EnterDesktop; player_response.data = null; MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.LeaveDesktop: // 离开桌子 { EbLog.Note("CellPlayer.c2sPlayerRequest LeaveDesktop() EtGuid=" + Entity.Guid); await CoPlayerDesktop.leaveDesktop(); PlayerResponse player_response; player_response.id = PlayerResponseId.LeaveDesktop; player_response.data = null; MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.GetOnlinePlayerNum: // 获取在线玩家数量 { var grain = Entity.getUserData <GrainCellPlayer>(); var grain_playerservice = grain.GF.GetGrain <ICellPlayerService>(0); var num = await grain_playerservice.getOnlinePlayerNum(); PlayerResponse player_response; player_response.id = PlayerResponseId.GetOnlinePlayerNum; player_response.data = EbTool.protobufSerialize <int>(num); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.DevConsoleCmd: // 请求执行控制台命令 { var map_param = EbTool.protobufDeserialize <Dictionary <byte, string> >(player_request.data); string cmd = (string)map_param[0]; if (cmd == "AddItem") { int item_id = int.Parse(map_param[1]); int count = int.Parse(map_param[2]); Item item = null; CoBag.newItem(item_id, count, out item); } else if (cmd == "OperateItem") { string operate_id = map_param[1]; string item_objid = map_param[2]; ItemOperate item_operate = new ItemOperate(); item_operate.operate_id = operate_id; item_operate.item_objid = item_objid; CoBag.operateItem(item_operate); } else if (cmd == "SetLevel") { int level = int.Parse(map_param[1]); int exp = int.Parse(map_param[2]); CoActor.Def.mPropExperience.set(exp); CoActor.Def.mPropLevel.set(level); } } break; case PlayerRequestId.GetPlayerInfoOther: // 请求获取其他玩家信息 { var player_etguid = EbTool.protobufDeserialize <string>(player_request.data); var grain = Entity.getUserData <GrainCellPlayer>(); var grain_playerservice = grain.GF.GetGrain <ICellPlayerService>(0); var player_info = await grain_playerservice.getPlayerInfoOther(player_etguid); PlayerResponse player_response; player_response.id = PlayerResponseId.GetPlayerInfoOther; player_response.data = EbTool.protobufSerialize <PlayerInfoOther>(player_info); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.ChangeProfileSkin: // 请求换肤 { var profileskin_tableid = EbTool.protobufDeserialize <int>(player_request.data); var profileskin = EbDataMgr.Instance.getData <TbDataPlayerProfileSkin>(profileskin_tableid); if (profileskin == null) { goto End; } CoActor.Def.mPropProfileSkinTableId.set(profileskin_tableid); var grain = Entity.getUserData <GrainCellPlayer>(); grain.asyncSaveState(); PlayerResponse player_response; player_response.id = PlayerResponseId.ChangeProfileSkin; player_response.data = EbTool.protobufSerialize <int>(profileskin_tableid); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.ChangeNickName: // 请求改昵称 { var nick_name = EbTool.protobufDeserialize <string>(player_request.data); CoActor.Def.mPropNickName.set(nick_name); var grain = Entity.getUserData <GrainCellPlayer>(); grain.asyncSaveState(); PlayerResponse player_response; player_response.id = PlayerResponseId.ChangeNickName; player_response.data = EbTool.protobufSerialize <string>(nick_name); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.ChangeIndividualSignature: // 请求改签名 { var sign = EbTool.protobufDeserialize <string>(player_request.data); CoActor.Def.mPropIndividualSignature.set(sign); var grain = Entity.getUserData <GrainCellPlayer>(); grain.asyncSaveState(); PlayerResponse player_response; player_response.id = PlayerResponseId.ChangeIndividualSignature; player_response.data = EbTool.protobufSerialize <string>(sign); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.RefreshIpAddress: // 请求刷新Ip所在地 { _refreshIpAddress(); PlayerResponse player_response; player_response.id = PlayerResponseId.RefreshIpAddress; player_response.data = EbTool.protobufSerialize <string>(CoActor.Def.mPropIpAddress.get()); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.ReportPlayer: // 举报玩家 { var report = EbTool.protobufDeserialize <ReportPlayer>(player_request.data); PlayerResponse player_response; player_response.id = PlayerResponseId.ReportPlayer; player_response.data = EbTool.protobufSerialize <ReportPlayer>(report); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.InvitePlayerEnterDesktop: // 邀请玩家进桌 { var invite = EbTool.protobufDeserialize <InvitePlayerEnterDesktop>(player_request.data); var grain = Entity.getUserData <GrainCellPlayer>(); var grain_playerproxy = grain.GF.GetGrain <ICellPlayerProxy>(new Guid(invite.player_info.player_etguid)); grain_playerproxy.s2sInvitePlayerEnterDesktop(Entity.Guid, invite.desktop_etguid, invite.sb, invite.bb, invite.player_num, invite.seat_num); PlayerResponse player_response; player_response.id = PlayerResponseId.InvitePlayerEnterDesktop; player_response.data = EbTool.protobufSerialize <ProtocolResult>(ProtocolResult.Success); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.GivePlayerChip: // 赠送玩家筹码 { var give_chip = EbTool.protobufDeserialize <GivePlayerChip>(player_request.data); ProtocolResult re = ProtocolResult.Failed; int chip_cur = CoActor.Def.PropGold.get(); if (chip_cur >= 100000 && give_chip.chip >= 100000 && chip_cur >= give_chip.chip) { var grain = Entity.getUserData <GrainCellPlayer>(); var grain_playerproxy = grain.GF.GetGrain <ICellPlayerProxy>(new Guid(give_chip.player_info.player_etguid)); await grain_playerproxy.s2sGivePlayerChip(Entity.Guid, give_chip.chip); re = ProtocolResult.Success; chip_cur -= give_chip.chip; CoActor.Def.PropGold.set(chip_cur); } else { re = ProtocolResult.Failed; } PlayerResponse player_response; player_response.id = PlayerResponseId.GivePlayerChip; player_response.data = EbTool.protobufSerialize <ProtocolResult>(re); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.SetVip4Test: // 请求设置是否为Vip { EbLog.Note("CellPlayer.c2sPlayerRequest LeaveDesktop() EtGuid=" + Entity.Guid); var is_vip = EbTool.protobufDeserialize <bool>(player_request.data); CoActor.Def.mPropIsVIP.set(is_vip); var grain = Entity.getUserData <GrainCellPlayer>(); grain.asyncSaveState(); PlayerResponse player_response; player_response.id = PlayerResponseId.SetVip4Test; player_response.data = EbTool.protobufSerialize(is_vip); MethodData result = new MethodData(); result.method_id = MethodType.s2cPlayerResponse; result.param1 = EbTool.protobufSerialize <PlayerResponse>(player_response); return(result); } case PlayerRequestId.SetAFK: // 请求设置是否挂机 { var afk = EbTool.protobufDeserialize <bool>(player_request.data); if (CoActor.Def.mPropIsBot.get()) { // 机器人总是挂机状态,无需设置 goto End; } if (CoActor.Def.mPropIsAFK.get() != afk) { CoActor.Def.mPropIsAFK.set(afk); PlayerNotify player_notify; player_notify.id = PlayerNotifyId.SetAFK; player_notify.data = EbTool.protobufSerialize <bool>(afk); MethodData notify_data = new MethodData(); notify_data.method_id = MethodType.s2cPlayerNotify; notify_data.param1 = EbTool.protobufSerialize <PlayerNotify>(player_notify); var grain = Entity.getUserData <GrainCellPlayer>(); var grain_player = grain.GF.GetGrain <ICellPlayer>(new Guid(Entity.Guid)); grain_player.s2sNotify(notify_data); } } break; default: break; } End: MethodData r = new MethodData(); r.method_id = MethodType.None; return(r); }
//------------------------------------------------------------------------- Task <MethodData> _c2sPlayerDesktopRequest(MethodData method_data) { return(CoPlayerDesktop.c2sPlayerDesktopRequest(method_data)); }