// -------------------------------------------------------------------- // @author: zhangyusong@syg.com(必填, 创建模块的人员) // @description: // 好友协议和逻辑控制层 //
Create: 2018-12-24 16:41:34 // -------------------------------------------------------------------- var FriendEvent = require("friend_event"); var RoleController = require("role_controller"); var FriendVo = require("friend_vo"); var FriendEvent = require("friend_event"); var FriendCheckInfoWindow = require("friend_check_info_winodw"); var FriendConst = require("friend_const"); var ChatController = require("chat_controller"); var FriendController = cc.Class({ extends: BaseController, ctor: function () { }, // 初始化配置数据 initConfig: function () { var FriendModel = require("friend_model"); this.model = new FriendModel(); this.model.initConfig(); }, // 返回当前的model getModel: function () { return this.model; }, // 注册监听事件 registerEvents: function () { if (this.login_success == null) { this.login_success = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () { this.friendList(); if (this.time_ticket) { gcore.Timer.del(this.time_ticket); this.time_ticket = null; } this.time_ticket = gcore.Timer.set((function () { this.updateFriendTishi(); }).bind(this), 60, 1) }, this) } if (!this.request_event) { this.request_event = gcore.GlobalEvent.bind(FriendEvent.REQUEST_LIST, function () { this.friendList(); this.getBlackList(); }, this) } if (!this.add_event) { this.add_event = gcore.GlobalEvent.bind(FriendEvent.FRIEND_ADD, function (srv_id, rid) { this.addOther(srv_id, rid); }, this) } if (!this.query_event) { this.query_event = gcore.GlobalEvent.bind(FriendEvent.FRIEND_QUERY_FIND, function (value) { this.queryFind(value); }, this) } if (!this.recommend_event) { this.recommend_event = gcore.GlobalEvent.bind(FriendEvent.FRIEND_RECOMMEND, function () { this.recommend(); }, this) } if (!this.infom_event) { //好友邮件界面 this.infom_event = gcore.GlobalEvent.bind(FriendEvent.OPEN_FRIEND_INFOM, function (data, count, begin_pos, group_type) { this.openInfom(data, count, begin_pos, group_type) }, this) } //增加私聊数据 if (!this.private_msg) { this.private_msg = gcore.GlobalEvent.bind(EventId.CHAT_UPDATE_SELF, function (chatVo) { this.addPrivateMsg(chatVo); }, this) } if (!this.update_chat_and_apply_event) { this.update_chat_and_apply_event = gcore.GlobalEvent.bind(FriendEvent.UPDATE_COUNT, function () { this.updateFriendTishi(); }, this) } }, // 注册协议接受事件 registerProtocals: function () { // this.RegisterProtocal(1110, this.on1110); this.RegisterProtocal(13300, this.friendListHandler); //好友列表 this.RegisterProtocal(13301, this.onlineHandler); //好友在线状态 this.RegisterProtocal(13302, this.friendStateHandler); //单个好友一些状态改变 this.RegisterProtocal(13303, this.addOtherHandler); //请求加好友;A向服务端请求想加B为好友;会返回消息告诉A这次请求是否成功 this.RegisterProtocal(13304, this.addMeHandler); //被加好友,服务端告诉客户端;A想加B为好友 this.RegisterProtocal(13305, this.acceptHandler); //B告诉服务端,加或不加A为好友;服务端会告诉B这次结果怎么样 this.RegisterProtocal(13306, this.batchAddHandler); //批量加好友 this.RegisterProtocal(13307, this.delOtherHandler); //主动删除好友;需要客户端把好友删除 this.RegisterProtocal(13308, this.delMeHandler); //被动删除好友 this.RegisterProtocal(13310, this.addToListHandler); //添加好友到列表(添加好友成功后服务端推送) this.RegisterProtocal(13311, this.applyListHandler); //好友申请列表 this.RegisterProtocal(13312, this.refuseApplyListHandler); //全部拒绝申请列表 this.RegisterProtocal(13314, this.queryFindHandler); //查询好友信息 this.RegisterProtocal(13315, this.queryFriendTeamHandler); //查询好友是否有队伍 this.RegisterProtocal(13316, this.strengthHandler); //好友体力赠送领取 this.RegisterProtocal(13317, this.batchStrengthHandler); //好友体力一键赠送领取 this.RegisterProtocal(13320, this.recommendHandler); //推荐好友 this.RegisterProtocal(10388, this.getRolesOnline); // 查询其它玩家是否在线 //黑名单 this.RegisterProtocal(13330, this.handle13330); //获取黑名单列表信息 this.RegisterProtocal(13331, this.handle13331); //获取增加更新黑名单列表信息 this.RegisterProtocal(13332, this.handle13332); //拉黑 this.RegisterProtocal(13333, this.handle13333); //移除黑名 this.RegisterProtocal(13334, this.handle13334); //全部同意好友申请 }, isFriend: function (srv_id, rid) { if (this.model == null) return null; else return this.model.isFriend(srv_id, rid); }, updateFriendTishi: function () { var award_num = this.getModel().getAwardNum() || 0; var appl_num = this.getModel().getApplyNum() || 0; var list = [{ bid: 1, num: award_num }, { bid: 2, num: appl_num }]; var MainuiConst = require("mainui_const"); require("mainui_controller").getInstance().setFunctionTipsStatus(MainuiConst.icon.friend, list) }, //获取好友列表 friendList: function () { this.SendProtocal(13300, {}); }, friendListHandler: function (data) { if (this.model == null) { this.model = new FriendModel(); } this.model.setFriendPresentCount(data.present_count); this.model.setFriendDrawCount(data.draw_count); this.model.setFriendDrawTotalCount(data.draw_all); for (var k in data.friend_list) { var v = data.friend_list[k]; var friend = null; if (this.model.isFriend(v.srv_id, v.rid)) { friend = this.model.getVo(v.srv_id, v.rid); friend.setData(v); } else { friend = new FriendVo(); friend.setData(v); this.model.add(friend); } } gcore.GlobalEvent.fire(FriendEvent.FRIEND_LIST, this.model.getArray()); this.apply(); this.updateFriendTishi(); }, //好友是否上线 onlineHandler: function (data) { var old_index = this.model.getIndex(data.srv_id, data.rid); var vo1 = this.model.updateVo(data.srv_id, data.rid, "is_online", data.is_online); var vo2 = this.model.updateVo(data.srv_id, data.rid, "login_out_time", data.login_out_time); var new_index = this.model.getIndex(data.srv_id, data.rid); if (old_index != null && new_index != null && vo2 != null) { if (vo1 != null) { if (data.is_online == 1) { gcore.GlobalEvent.fire(FriendEvent.FRIEND_UPDATE_ITEM, vo1, 0); message(cc.js.formatStr(Utils.TI18N("您的好友%s上线了"), vo1.name)) } } } }, //单个好友一些状态改变 friendStateHandler: function (data) { if (data.srv_id != null && data.rid != null) { this.model.updateSingleFriendData(data.srv_id, data.rid, data); gcore.GlobalEvent.fire(FriendEvent.FRIEND_LIST, this.model.getArray()); } this.updateFriendTishi(); }, //好友申请列表 apply: function () { this.SendProtocal(13311, {}); }, applyListHandler: function (data) { //亲密度设置为-1(表示陌生人) //Debug.info(data) for (var k in data.friend_req_list) { data.friend_req_list[k].intimacy = -1; } this.model.setApplyList(data.friend_req_list); gcore.GlobalEvent.fire(FriendEvent.FRIEND_LIST, this.model.getApplyList()); gcore.GlobalEvent.fire(FriendEvent.FRIEND_APPLY); this.updateFriendTishi(); }, send_refuseApplyList: function () { this.SendProtocal(13312, {}); }, refuseApplyListHandler: function (data) { if (data.code == 1) { gcore.GlobalEvent.fire(FriendEvent.UPDATE_APPLY_LIST); this.model.apply = []; this.updateFriendTishi(); } }, //全部同意好友申请 send_acceptApplyList: function (list) { var protocal = {}; protocal.role_ids = list; this.SendProtocal(13334, protocal); }, handle13334: function (data) { gcore.GlobalEvent.fire(FriendEvent.UPDATE_APPLY_LIST); this.model.apply = []; this.updateFriendTishi(); gcore.GlobalEvent.fire(FriendEvent.Update_Red_Point); }, //好友申请个数 appCount: function () { if (this.model) { return this.model.apply.length; } return 0 }, //推荐好友 recommend: function () { this.SendProtocal(13320, {}); }, recommendHandler: function (data) { var list = []; var srv_id = RoleController.getInstance().getRoleVo().srv_id; var rid = RoleController.getInstance().getRoleVo().rid; for (var k in data.recommend_list) { var v = data.recommend_list[k]; if (!this.isFriend(v.srv_id, v.rid) && !(srv_id == v.srv_id && rid == v.rid)) { v.intimacy = -1; //标记为陌生人 list.push(v); } } gcore.GlobalEvent.fire(FriendEvent.UD_COMMEND_LIST, list); }, //模糊查询 queryFind: function (name) { var protocal = {}; protocal.name = name; this.SendProtocal(13314, protocal); }, queryFindHandler: function (data) { var t = []; if (Utils.next(data.role_list)) { var srv_id = RoleController.getInstance().getRoleVo().srv_id; var rid = RoleController.getInstance().getRoleVo().rid; var count = 0; for (var k in data.role_list) { var v = data.role_list[k]; if (!this.isFriend(v.srv_id, v.rid) && !(srv_id == v.srv_id && rid == v.rid)) { v.intimacy = -1; //标记为陌生人 t.push(v); count = count + 1; } if (count > 25) break; } t.sort(function (a, b) { return a.lev > b.lev; }) if (!t || Utils.next(t) == null) { message("找不到玩家"); } } else { message("找不到玩家"); } gcore.GlobalEvent.fire(FriendEvent.FRIEND_QUERY_RESULT, t); }, queryFriendIsHasTeam: function (rid, srv_id) { var protocal = {}; protocal.rid = rid; protocal.srv_id = srv_id; this.SendProtocal(13315, protocal); }, queryFriendTeamHandler: function (data) { if (data.code == 1) { //有队伍 this.openFrinedInfo(1); } else if (data.code == 0) { //没队伍 this.openFrinedInfo(0) } }, //好友体力领取 赠送 code: 0 赠送 ,1领取 sender_13316: function (code, rid, srv_id) { var protocal = {}; protocal.rid = rid; protocal.srv_id = srv_id; protocal.code = code; this.SendProtocal(13316, protocal); }, strengthHandler: function (data) { if (data.code == 1) { this.model.setFriendPresentCount(data.present_count); this.model.setFriendDrawCount(data.draw_count); //更新数据 this.model.updateVo(data.srv_id, data.rid, "is_draw", data.is_draw) this.model.updateVo(data.srv_id, data.rid, "is_present", data.is_present) gcore.GlobalEvent.fire(FriendEvent.STRENGTH_UPDATE, { list: { data } }); gcore.Timer.set(function () { gcore.GlobalEvent.fire(FriendEvent.Update_Red_Point) }, 60, 1) } message(data.msg); }, //好友体力领取 赠送 code: 0 赠送 ,1领取 sender_13317: function (code, list) { var protocal = {}; protocal.list = list; protocal.code = code; this.SendProtocal(13317, protocal); }, batchStrengthHandler: function (data) { if (data.code == 1) { gcore.GlobalEvent.fire(FriendEvent.STRENGTH_UPDATE, data); gcore.GlobalEvent.fire(FriendEvent.Update_Red_Point); } message(data.msg); }, //请求加好友;A向服务端请求想加B为好友;会返回消息告诉A这次请求是否成功 addOther: function (srv_id, rid) { var protocal = {}; protocal.srv_id = srv_id; protocal.rid = rid; this.SendProtocal(13303, protocal); }, addOtherHandler: function (data) { message(data.msg); if (data.code == 1) { this.closeInfo(); } }, //被加好友,服务端告诉客户端;A想加B为好友 addMeHandler: function (data) { if (this.model.isBlack(data.rid, data.srv_id)) return this.apply(); }, //B告诉服务端,加或不加A为好友;服务端会告诉B这次结果怎么样 accept: function (srv_id, rid, agreed) { var protocal = {}; protocal.srv_id = srv_id; protocal.rid = rid; protocal.agreed = agreed; this.SendProtocal(13305, protocal); }, //删除客户端缓存的好友申请数据 acceptHandler: function (data) { if (data != null) { for (var k in this.model.apply) { var v = this.model.apply[k]; if (v != null && v.srv_id == data.srv_id && v.rid == data.rid) { this.model.apply.splice(k, 1); } } gcore.GlobalEvent.fire(FriendEvent.UPDATE_COUNT, 2, this.model.apply.length); //单个数据增加 this.updateFriendTishi(); if (data.code == 1) { ChatController.getInstance().getModel().saveTalkTime(data.srv_id, data.rid) message(data.msg); } else { message(data.msg); } } }, //添加好友到列表(添加好友成功后服务端推送) addToListHandler: function (data) { if (this.model == null) return var friend = new FriendVo(); friend.setData(data); this.model.add(friend); if (this.model.apply != null) { for (var m in this.model.apply) { var n = this.model.apply[m]; if (n && data.srv_id == n.srv_id && data.rid == n.rid) { this.model.apply.splice(m, 1); } } } gcore.Timer.set(function () { gcore.GlobalEvent.fire(FriendEvent.UPDATE_APPLY); }, 1000, 1) message(cc.js.formatStr(Utils.TI18N("成功添加%s为好友"), data.name)) }, //批量加好友 batchAdd: function (role_ids) { var protocal = {}; protocal.role_ids = role_ids; this.SendProtocal(13306, protocal); }, batchAddHandler: function (data) { message(data.msg); }, //主动删除好友;需要客户端把好友删除 delOther: function (srv_id, rid) { var confirm_handler = (function () { var protocal = {}; protocal.srv_id = srv_id; protocal.rid = rid; this.SendProtocal(13307, protocal); }).bind(this) var CommonAlert = require("commonalert"); CommonAlert.show(Utils.TI18N("好友删除后,将清空聊天记录,是否删除好友?"), Utils.TI18N("删除"), confirm_handler, Utils.TI18N("取消")) // confirm_handler(); }, //删除数据 //删除视图 delOtherHandler: function (data) { if (data.code == 1) { var old_data = this.model.getVo(data.srv_id, data.rid); if (old_data != null) { this.model.del(data.srv_id, data.rid); var role_vo = RoleController.getInstance().getRoleVo(); ChatController.getInstance().getModel().deltePrivateTarget(data) gcore.GlobalEvent.fire(FriendEvent.FRIEND_DELETE, old_data, this.group_type); } this.closeInfom(); } message(data.msg); }, //被动删除好友(被人删) delMeHandler: function (data) { var old_data = this.model.getVo(data.srv_id, data.rid); if (old_data != null) { this.model.del(data.srv_id, data.rid); var role_vo = RoleController.getInstance().getRoleVo(); ChatController.getInstance().getModel().deltePrivateTarget(data) gcore.GlobalEvent.fire(FriendEvent.UPDATE_GROUP_COUNT); } }, deleteConnecter: function (vo) { var confirm_handler = function () { ChatController.getInstance().getModel().clearTalkTime(vo.srv_id, vo.rid) // gcore.GlobalEvent.fire(ContactEvent.CLOSE_TALK_INFO) this.closeInfom(); gcore.GlobalEvent.fire(FriendEvent.FRIEND_DELETE, vo, FriendConst.FriendGroupType.communicate) }.bind(this) var CommonAlert = require("commonalert"); CommonAlert.show("是否从列表中删除该联系人?", "删除", confirm_handler, "取消") }, deleteBlackConnecter: function (srv_id, rid) { ChatController.getInstance().getModel().clearTalkTime(srv_id, rid) // gcore.GlobalEvent.fire(ContactEvent.CLOSE_TALK_INFO) this.closeInfom(); gcore.GlobalEvent.fire(FriendEvent.FRIEND_DELETE, { srv_id: srv_id, rid: rid }, FriendConst.FriendGroupType.friend) }, sender_10388: function (list) { var protocal = {}; protocal.id_list = list; this.SendProtocal(10388, protocal); }, //获取常用联系人上线情况 getRolesOnline: function (data) { if (data != null) { gcore.GlobalEvent.fire(FriendEvent.UPDATE_ONLINE, data.online_roles); } }, //竖版好友主界面 openFriendWindow: function (bool, index) { if (bool == true) { if (!this.friend_window) { var FriendWindow = require("friend_window"); this.friend_window = new FriendWindow(); } this.friend_window.open(index); } else { if (this.friend_window) { this.friend_window.close(); this.friend_window = null; } } }, //竖版好友推荐查找界面 openFriendFindWindow: function (bool) { if (bool == true) { if (!this.friend_find_window) { var FriendAddWindow = require("friend_add_window"); this.friend_find_window = new FriendAddWindow(); } this.friend_find_window.open(); } else { if (this.friend_find_window) { this.friend_find_window.close(); this.friend_find_window = null; } } }, //关闭好友信息界面 closeInfo: function () { // if (!this.info && this.info.isOpen()) { // this.info.close(); // this.info = null; // } }, openFrinedInfo: function (code_type) { this.closeRecommendPanel(); var show_type = null; if (this.group_type == 1) { //我的好友 show_type = [11, 12, 15]; } else if (this.group_type == 3) { show_type = [2, 13, 15]; //黑名单 } }, //打开好友信息查看界面 data有srv_id,rid就行 openFriendCheckPanel: function (status, data) { if (status == true) { if (!this.friend_check_view) { this.friend_check_view = new FriendCheckInfoWindow(); } this.friend_check_view.open(data); } else { if (this.friend_check_view) { this.friend_check_view.close(); this.friend_check_view = null; } } }, //打开好友个人荣誉界面 openFriendGloryWindow: function (status, data) { if (status == true) { if (!this.friend_glory_view) { var FriendGloryWindow = require("friend_glory_window") this.friend_glory_view = new FriendGloryWindow(); } this.friend_glory_view.open(data); } else { if (this.friend_glory_view) { this.friend_glory_view.close(); this.friend_glory_view = null; } } }, openInfom: function (data, count, begin_pos, group_type) { this.begin_pos = begin_pos; this.group_type = group_type || 1; this.select_data = data; this.openFrinedInfo(); }, //关闭好友邮件面板 closeInfom: function () { // if (this.infom && this.infom.isOpen()) { // this.infom.close(); // this.infom = null; // } }, closeRecommendPanel: function () { // if (this.commend_ui && this.commend_ui.isOpen()) { // this.commend_ui.close(); // this.commend_ui = null; // } }, //私聊未读数据显示 addPrivateMsg: function (chat_vo) { }, //删除聊天数量 delPriCount: function (key) { this.pri_list[key] = null; gcore.GlobalEvent.fire(FriendEvent.UPDATE_COUNT, 1, key, 0); //单个数据增加 }, //获取好友联系人聊天的总数目 getLpriCount: function () { var count = 0; for (var i in this.pri_list) { var value = this.model.isFriend2(v); if (value == true) { count = count + v; } } return count; }, allPriCount: function () { var count = 0; for (var i in this.pri_list) { count = count + v; } return count }, singlePriCount: function (key) { if (this.pri_list[key]) { return this.pri_list[key]; } return 0 }, __delete: function () { if (this.model != null) { this.model.DeleteMe(); this.model = null; } this.closeRecommendPanel(); }, //--------------黑名单部分 handle13330: function (data) { this.model.initBlackList(data.black_list); }, //获取黑名单列表 getBlackList: function () { this.SendProtocal(13330, {}); }, //拉黑和移除黑名单推送 handle13331: function (data) { if (data.type == 1) { //加黑名单 this.model.initBlackList(data.black_list); gcore.GlobalEvent.fire(FriendEvent.UPDATE_GROUP_COUNT); } else if (data.type == 2) { //移除黑名单 } }, //拉黑 addToBlackList: function (rid, srv_id) { var protocal = {}; protocal.rid = rid; protocal.srv_id = srv_id; this.SendProtocal(13332, protocal); }, //拉黑是否成功返回 handle13332: function (data) { message(data.msg); if (data.code == 1) { var old_data = this.model.getVo(data.srv_id, data.rid); //拉黑后在好友列表里面删掉该好友 if (old_data) { this.model.del(data.srv_id, data.rid); //删除最近联系人 // var role_vo = RoleController.getInstance().getRoleVo(); // ChatController:getInstance():getModel():deleteCache(role_vo.srv_id,role_vo.rid,data.srv_id,data.rid) gcore.GlobalEvent.fire(FriendEvent.FRIEND_DELETE, old_data, this.group_type); } } }, //删除黑名单 deleteBlackList: function (rid, srv_id) { var protocal = {}; protocal.rid = rid; protocal.srv_id = srv_id; this.SendProtocal(13333, protocal); }, //删除黑名单返回 handle13333: function (data) { if (data.code == 1) { this.model.removeBlack(data.rid, data.srv_id); gcore.GlobalEvent.fire(FriendEvent.FRIEND_DELETE, data, this.group_type || FriendConst.FriendGroupType.black_list); //类型2是黑名单分组 } } }); module.exports = FriendController;