Hibok
您不能選擇超過 %s 個話題 話題必須以字母或數字為開頭,可包含連接號 ('-') 且最長為 35 個字
 
 
 
 
 
 

1553 行
50 KiB

  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'dart:typed_data';
  4. import 'package:chat/chat/group_chat_view.dart';
  5. import 'package:chat/data/UserData.dart';
  6. import 'package:chat/data/chat_data_mgr.dart';
  7. import 'package:chat/data/constants.dart';
  8. import 'package:chat/data/group_data_mgr.dart';
  9. import 'package:chat/data/translate_hk_data_mgr.dart';
  10. import 'package:chat/generated/i18n.dart';
  11. import 'package:chat/home/IndexPage.dart';
  12. import 'package:chat/home/realtimehelper/translation_butler_page.dart';
  13. import 'package:chat/models/ChatMsg.dart';
  14. import 'package:chat/models/group_info_model.dart';
  15. import 'package:chat/proto/all.pbserver.dart';
  16. import 'package:chat/proto/transhousekeeper.pb.dart';
  17. import 'package:chat/utils/NetUtil.dart';
  18. import 'package:chat/utils/blacklist_mgr.dart';
  19. import 'package:chat/utils/friend_list_mgr.dart';
  20. import 'package:chat/utils/group_member_model.dart';
  21. import 'package:chat/utils/local_notification_util.dart';
  22. import 'package:chat/utils/sound_util.dart';
  23. import 'package:chat/utils/sql_util.dart';
  24. import 'package:chat/utils/upload_util.dart';
  25. import 'package:flutter/material.dart';
  26. import 'package:oktoast/oktoast.dart';
  27. import 'package:fixnum/fixnum.dart';
  28. import 'LoadingDialog.dart';
  29. import 'MessageMgr.dart';
  30. const MaxMsgContentSize = 1024 * 1024 * 3;
  31. class MsgHandler {
  32. //当前会话ID
  33. static int curActiveSession;
  34. static bool isTranslate = false;
  35. static bool isAudioConnect = false;
  36. static BuildContext context = Constants.getCurrentContext();
  37. static List<MsgModel> sendCache = [];
  38. static Timer ringTimer;
  39. static int audioChatRequestFriendId = 0;
  40. static Function createGroupComplete;
  41. static updateActiveSesstion(int session, {bool isGroup = false}) {
  42. curActiveSession = session;
  43. getUnreadMsgDetail(isGroup);
  44. ChatDataMgr().signRead(curActiveSession, isGroup: isGroup);
  45. }
  46. static getActiveSesstion(List<int> memberList) {
  47. var seq = CreateSessionReq();
  48. var member = seq.memberIds;
  49. member.addAll(memberList);
  50. NetWork().sendMsg(ComId.Chat, 101, seq);
  51. }
  52. //根据会话获取会话成员信息
  53. static getSessionInfo(int sessionId) {
  54. var seq = QuerySessionReq();
  55. seq.sessionId = sessionId;
  56. NetWork().sendMsg(ComId.Chat, 102, seq);
  57. }
  58. //创建群
  59. static createGroup(List<int> members, Function complete) {
  60. var seq = CreateChatGroupReq.create();
  61. seq.members.addAll(members);
  62. createGroupComplete = complete;
  63. var curTime = DateTime.now();
  64. print('发送建群消息 $curTime');
  65. NetWork().sendMsg(ComId.Chat, 201, seq);
  66. }
  67. //创建群结果
  68. static handleCreateGroup(List<int> content) async {
  69. var res = CreateChatGroupRes.fromBuffer(content);
  70. if (res.errorCode == 0) {
  71. var curTime = DateTime.now();
  72. print('建群成功 $curTime');
  73. GroupInfoModel infoModel = GroupInfoModel.fromInfo(res.group);
  74. GroupInfoMgr().addGroup(infoModel);
  75. if (createGroupComplete != null) {
  76. createGroupComplete(infoModel);
  77. createGroupComplete = null;
  78. }
  79. MessageMgr().emit('Update Group List');
  80. } else {
  81. print('建群失败');
  82. }
  83. }
  84. static createCoinBagMsg(Map args) {
  85. MsgModel msg;
  86. Int64 time = Int64((DateTime.now()).millisecondsSinceEpoch);
  87. var friendId = args['friendId'];
  88. RedWallet wallet = RedWallet.create();
  89. wallet.amount = args['amount'];
  90. wallet.title = args['title'];
  91. wallet.orderId = args['redNo'];
  92. wallet.tuId = friendId;
  93. wallet.suId = UserData().basicInfo.userId;
  94. wallet.state = RedWalletState.Uncollected;
  95. var myId = UserData().basicInfo.userId;
  96. msg = MsgModel(myId, friendId, ChatType.RedWalletChatType.value,
  97. wallet.writeToBuffer(), time.toInt(), curActiveSession);
  98. return msg;
  99. }
  100. static createSendMsg(ChatType chatType, content,
  101. {int extra,
  102. int friendId,
  103. String localFile,
  104. MsgModel refMsg,
  105. String refShortTxt,
  106. List<int> altUsers,
  107. ChatChannelType channelType = ChatChannelType.Session}) {
  108. MsgModel msg;
  109. if (content is String) {
  110. content = utf8.encode(content);
  111. }
  112. Int64 time = Int64((DateTime.now()).millisecondsSinceEpoch);
  113. var myId = UserData().basicInfo.userId;
  114. if (channelType == ChatChannelType.Group) {
  115. msg = MsgModel(
  116. myId, 0, chatType.value, content, time.toInt(), curActiveSession,
  117. channelType: channelType.value);
  118. } else {
  119. msg = MsgModel(myId, friendId, chatType.value, content, time.toInt(),
  120. curActiveSession,
  121. channelType: channelType.value);
  122. }
  123. if (localFile != null) {
  124. var fileId = curActiveSession.toString() + time.toString();
  125. msg.localFile = localFile;
  126. msg.extraFile = fileId;
  127. }
  128. if (extra != null) {
  129. msg.extraInfo = extra;
  130. }
  131. if (refMsg != null) {
  132. QuoteMsg quoteMsg = QuoteMsg.create();
  133. quoteMsg.sendUserId = refMsg.from;
  134. quoteMsg.sendTime = Int64(refMsg.time);
  135. quoteMsg.targetId = refMsg.sessionId;
  136. quoteMsg.content = refShortTxt;
  137. quoteMsg.channelType = ChatChannelType.valueOf(refMsg.channelType);
  138. msg.refMsgContent = quoteMsg.writeToBuffer();
  139. }
  140. if (altUsers != null && altUsers.length > 0) {
  141. msg.altUsers = altUsers;
  142. }
  143. return msg;
  144. }
  145. static insertMsgToDB(MsgModel msg) {
  146. //缓存消息,发送成功之后清理
  147. if (!sendCache.contains(msg)) {
  148. sendCache.add(msg);
  149. ChatDataMgr().saveMsg(msg);
  150. }
  151. }
  152. //登录成功之后重新发送缓存的消息
  153. static flushCacheMsg() {
  154. for (var i = 0; i < sendCache.length; i++) {
  155. sendChatMsg(sendCache[i]);
  156. }
  157. }
  158. static sendChatMsg(MsgModel msg) {
  159. var seq = ChatSendReq.create();
  160. seq.targetId = msg.sessionId;
  161. seq.sendTime = Int64(msg.time);
  162. seq.cType = ChatType.valueOf(msg.msgType);
  163. seq.channelType = ChatChannelType.valueOf(msg.channelType);
  164. if (msg.extraFile != null) {
  165. seq.enclosureUrl = msg.extraFile;
  166. }
  167. if (msg.extraInfo != null) {
  168. seq.contentSzie = msg.extraInfo;
  169. }
  170. if (msg.refMsgContent != null && msg.refMsgContent.length > 0) {
  171. seq.quoteMsg = msg.refMsgContent;
  172. }
  173. if (msg.altUsers != null && msg.altUsers.length > 0) {
  174. print('设置@信息 ${msg.altUsers.toString()}');
  175. seq.altUserIds.addAll(msg.altUsers);
  176. }
  177. seq.contentBuff = msg.msgContent;
  178. if (msg.msgContent.length > MaxMsgContentSize) {
  179. showToast(I18n.of(context).server_error_tips);
  180. print('消息包大小超过3M');
  181. }
  182. //本地文件为空或者等发送成功之后才可以发送
  183. if (msg.localFile == null || msg.state >= MsgState.Uploaded) {
  184. Future.delayed(Duration(seconds: 60), () {
  185. if (msg.state != MsgState.SendingSuccess) {
  186. msg.state = MsgState.SendingFailed;
  187. ChatDataMgr().updateMsgState(
  188. msg.sessionId, msg.time, msg.channelType, msg.state);
  189. }
  190. });
  191. NetWork().sendMsg(ComId.Chat, 1, seq);
  192. msg.state = MsgState.Sending;
  193. }
  194. }
  195. //获取会话未读消息
  196. static getUnreadMsgDetail(bool isGroup) {
  197. print('获取未读消息 群$isGroup');
  198. // showToast('获取未读消息 群$isGroup');
  199. var seq = RequestTargetUnreadReq.create();
  200. seq.targetId = curActiveSession;
  201. if (curActiveSession == 10000) {
  202. seq.channelType = ChatChannelType.CSD;
  203. } else {
  204. seq.channelType =
  205. isGroup ? ChatChannelType.Group : ChatChannelType.Session;
  206. }
  207. NetWork().sendMsg(ComId.Chat, 5, seq);
  208. }
  209. static int tempGroupId=0;
  210. static int mLastClickTime = 0;
  211. static int timeInterval = 2500;
  212. // static int receivedCount=0;
  213. static handlerReceiveMsg(PushChat chat) async {
  214. bool isGroup = false;
  215. bool isTranslateHK= false;
  216. if (chat.channelType == ChatChannelType.Group) {
  217. print('群聊消息');
  218. isGroup = true;
  219. }else if (chat.channelType == ChatChannelType.TransHK) {
  220. print('聊天管家消息');
  221. isTranslateHK = true;
  222. }
  223. MsgModel msgModel;
  224. if (chat.sendUserId == 1) {
  225. //更新消息
  226. print('服务器更新消息');
  227. MsgModel findMsg;
  228. var msgList;
  229. if (isGroup) {
  230. msgList = ChatDataMgr().getGroupRecord();
  231. } else {
  232. msgList = ChatDataMgr().getRecord();
  233. }
  234. for (var i = 0; i < msgList.length; i++) {
  235. var msg = msgList[i];
  236. if (msg.time == chat.sendTime.toInt()) {
  237. findMsg = msg;
  238. }
  239. }
  240. //更新翻译
  241. if (findMsg != null) {
  242. findMsg.transTag = chat.translateState;
  243. if (chat.translateState == 4) {
  244. print('人工翻译结果更新${chat.targetId},${chat.translateState}');
  245. findMsg.translateContent = chat.humanTranslate;
  246. findMsg.enTranslateContent = chat.googleTranslate ?? Uint8List(0);
  247. ChatDataMgr().updateLastMsgWithTranslateMsg(chat);
  248. SqlUtil().updateUserTranslateContent(chat.targetId,
  249. chat.sendTime.toInt(), chat.humanTranslate, chat.translateState);
  250. } else if (chat.translateState == 3 || chat.translateState == 2) {
  251. print('机器翻译结果更新');
  252. ChatDataMgr().updateLastMsgWithTranslateMsg(chat);
  253. findMsg.translateContent = chat.tencentTranslate;
  254. findMsg.enTranslateContent = chat.googleTranslate;
  255. SqlUtil().updateMachineTranslateContent(
  256. chat.targetId,
  257. chat.sendTime.toInt(),
  258. chat.tencentTranslate,
  259. chat.googleTranslate,
  260. chat.translateState);
  261. }
  262. MessageMgr().emit('Update Translate Message', findMsg);
  263. }
  264. } else {
  265. if (chat.sendUserId == 0) {
  266. print('服务器通知消息 ${chat.sendTime.toInt()} 是否是翻译管家 $isTranslateHK');
  267. if (isGroup) {
  268. if (chat.cType == ChatType.GroupChatNoticeType) {
  269. //检查是否存在群信息
  270. var info = await GroupInfoMgr().getGroupInfo(chat.targetId);
  271. if (info == null) {
  272. print('群不存在');
  273. return;
  274. }
  275. var myId = UserData().basicInfo.userId;
  276. var notice = GroupChatNotice.fromBuffer(chat.contentBuff);
  277. print('群改变消息 changeType ${notice.changeType.toString()}');
  278. bool isShow = true;
  279. switch (notice.changeType) {
  280. case GroupChangeType.AddMember:
  281. GroupInfoMgr().addMembers(chat.targetId, notice.operateduId);
  282. break;
  283. case GroupChangeType.RemoveMember:
  284. var isMeIn = isContainMe(notice.operateduId);
  285. if (!isMeIn) {
  286. //别人,这个自己有群信息
  287. GroupInfoMgr()
  288. .removeMembers(chat.targetId, notice.operateduId);
  289. } else {
  290. //自己
  291. GroupInfoMgr().removeSelf(chat.targetId);
  292. print('已被移出该群,不能发消息了');
  293. }
  294. break;
  295. case GroupChangeType.GroupNameChange:
  296. print('更改群名 ${notice.changeStr}');
  297. GroupInfoMgr().updateGroupName(chat.targetId, notice.changeStr);
  298. break;
  299. case GroupChangeType.GroupNoticeChange:
  300. print('更改群公告 ${notice.changeStr}');
  301. GroupInfoMgr()
  302. .updateGroupDescription(chat.targetId, notice.changeStr);
  303. break;
  304. case GroupChangeType.GroupMemberAliasChange:
  305. isShow = false;
  306. print('修改别名 ${notice.operatuId.id} ${notice.changeStr}');
  307. GroupInfoMgr().updateMemberRefName(
  308. chat.targetId, notice.operatuId.id, notice.changeStr);
  309. //该消息不用显示和保存
  310. break;
  311. case GroupChangeType.MasterTrans:
  312. print(
  313. '转让群主 转让人${notice.operatuId.id},被转让人${notice.operateduId[0].id}');
  314. GroupInfoMgr().updateGroupMaster(chat.targetId,
  315. notice.operatuId.id, notice.operateduId[0].id);
  316. break;
  317. case GroupChangeType.QRCodeAddMemberNotice:
  318. if (notice.operatuId.id != myId) {
  319. //别人在此处理,自己走回应消息
  320. GroupInfoMgr().addMembers(chat.targetId, [notice.operatuId]);
  321. } else {}
  322. break;
  323. case GroupChangeType.GroupIsOpenMemberCheckChange:
  324. print('群主开启了群验证: ${notice.changeBool}');
  325. GroupInfoMgr()
  326. .updateAskSwitch(chat.targetId, notice.changeBool);
  327. break;
  328. case GroupChangeType.GroupMemberCheckAddMemberNotice:
  329. print('群主确认进群: ${notice.operateduId.length}');
  330. GroupInfoMgr().addMembers(chat.targetId, notice.operateduId);
  331. break;
  332. case GroupChangeType.GroupMemberLeave:
  333. print('有人离开群: ${notice.operatuId}');
  334. isShow = false;
  335. GroupInfoMgr().removeMembers(chat.targetId, [notice.operatuId]);
  336. break;
  337. default:
  338. }
  339. //不需要展示给用户看
  340. if (!isShow) {
  341. print('该消息不用展示');
  342. return;
  343. }
  344. msgModel = MsgModel(0, chat.sendUserId, chat.cType.value,
  345. chat.contentBuff, chat.sendTime.toInt(), chat.targetId,
  346. channelType: ChatChannelType.Group.value);
  347. }
  348. }
  349. else if(isTranslateHK){ //TODO ddddd
  350. var myId = UserData().basicInfo.userId;
  351. TransHKChatNotice notice = TransHKChatNotice.fromBuffer(chat.contentBuff);
  352. BaseUserInfo friendId ;
  353. if(notice.operateduId[0].id==myId){
  354. friendId =notice.operateduId[1];
  355. }else{
  356. friendId = notice.operateduId[0];
  357. }
  358. print('notice.operateduId length ${notice.operateduId.length}');
  359. print('friend id: ${friendId.id} ');
  360. int sessionId = chat.targetId;
  361. if (chat.cType == ChatType.GroupChatNoticeType) {
  362. print('是群公告哦');
  363. msgModel = MsgModel(0, friendId.id, chat.cType.value,
  364. chat.contentBuff, chat.sendTime.toInt(), sessionId,
  365. channelType: ChatChannelType.Session.value);
  366. }
  367. ///接到开始翻译管家消息-打开翻译管家页面
  368. if(notice.noticeType==TransHKChatNoticeType.StartChat){
  369. if(TranslateHKMgr().isUser){
  370. //TRANSLATE_HK_RECEIVE_ORDER 发送开始聊天弹窗
  371. }else{
  372. Future.delayed(Duration(seconds: 3),(){
  373. curActiveSession = sessionId;
  374. print('curActiveSession:$curActiveSession');
  375. MessageMgr().emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id);
  376. });
  377. }
  378. }
  379. }else{//私聊通知消息
  380. if (chat.cType == ChatType.RedWalletChatType) {
  381. //系统红包通知消息
  382. RedWallet wallet = RedWallet.fromBuffer(chat.contentBuff);
  383. var myId = UserData().basicInfo.userId;
  384. var friendId;
  385. if (myId == wallet.suId) {
  386. friendId = wallet.tuId;
  387. } else {
  388. friendId = wallet.suId;
  389. }
  390. int sessionId = chat.targetId;
  391. msgModel = MsgModel(0, friendId, chat.cType.value, chat.contentBuff,
  392. chat.sendTime.toInt(), sessionId,
  393. channelType: ChatChannelType.Session.value);
  394. //更新红包信息
  395. ChatDataMgr()
  396. .updateRedWalletMsg(sessionId, wallet.orderId, wallet.state);
  397. } else {
  398. print('未知私聊通知消息');
  399. }
  400. }
  401. } else { //聊天消息
  402. int sessionId = chat.targetId;
  403. print('sessionId $sessionId');
  404. if (isGroup) {
  405. GroupInfoMgr()
  406. .getGroupInfo(sessionId)
  407. .then((GroupInfoModel groupInfo) {
  408. bool showGroup = false;
  409. if (groupInfo != null) {
  410. showGroup = groupInfo.messageFree == 0;
  411. }
  412. if (showGroup ) {
  413. int nowTime = DateTime.now().millisecondsSinceEpoch;
  414. if (nowTime - mLastClickTime < timeInterval && tempGroupId==sessionId) { //2秒内同一群不重复弹出
  415. return;
  416. }
  417. tempGroupId = sessionId;
  418. LocalNotificationUtil.instance.show(
  419. I18n.of(context).notice, I18n.of(context).new_chat_msg,
  420. id: sessionId > 1000
  421. ? int.parse(sessionId.toString().substring(0, 3))
  422. : sessionId);
  423. mLastClickTime = nowTime;
  424. }
  425. });
  426. } else {
  427. LocalNotificationUtil.instance
  428. .show(I18n.of(context).notice, I18n.of(context).new_chat_msg);
  429. }
  430. msgModel = MsgModel(chat.sendUserId, chat.sendUserId, chat.cType.value,
  431. chat.contentBuff, chat.sendTime.toInt(), chat.targetId,
  432. channelType: chat.channelType.value);
  433. // if (chat.cType == ChatType.TextChatType){
  434. // String content =utf8.decode(msgModel.msgContent);
  435. // print('当前收到消息条数$receivedCount $content');
  436. // }
  437. if (chat.hasTencentTranslate()) {
  438. msgModel.translateContent = chat.tencentTranslate;
  439. }
  440. if (chat.hasGoogleTranslate()) {
  441. msgModel.enTranslateContent = chat.googleTranslate;
  442. }
  443. if (chat.hasContentSzie()) {
  444. msgModel.extraInfo = chat.contentSzie;
  445. }
  446. if (chat.targetId != curActiveSession) {
  447. msgModel.readState = 1; //未读标记
  448. }
  449. //视频附件
  450. if (chat.hasEnclosureUrl()) {
  451. msgModel.extraFile = chat.enclosureUrl;
  452. }
  453. if (chat.hasQuoteMsg()) {
  454. print('存在引用消息');
  455. msgModel.refMsgContent = chat.quoteMsg;
  456. }
  457. if (chat.altUserIds.length > 0) {
  458. print('存在@消息');
  459. msgModel.altUsers = chat.altUserIds;
  460. var myId = UserData().basicInfo.userId;
  461. for (var i = 0; i < msgModel.altUsers.length; i++) {
  462. if (msgModel.altUsers[i] == myId && curActiveSession != sessionId) {
  463. print('有人@了你');
  464. ChatDataMgr().groupUnreadProvider.setAlterMe(sessionId,msgModel.time);
  465. //to do
  466. }
  467. }
  468. print(chat.altUserIds.toString());
  469. }
  470. if (chat.cType == ChatType.TextChatType ||
  471. chat.cType == ChatType.ShortVoiceChatType ||
  472. chat.cType == ChatType.RedWalletChatType) {
  473. if (chat.hasTranslateState()) {
  474. //是否有人工翻译
  475. msgModel.transTag = chat.translateState;
  476. print('翻译标记:${chat.translateState}');
  477. }
  478. } else {
  479. msgModel.transTag = 0;
  480. }
  481. }
  482. if (msgModel == null) {
  483. print('消息为空,无法保存');
  484. return;
  485. }
  486. print('收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}');
  487. ChatDataMgr().saveMsg(msgModel);
  488. if (msgModel.msgType == ChatType.ShortVoiceChatType.value) {
  489. //如果是语音消息,自动下载
  490. msgModel.state = MsgState.Downloading;
  491. var filePath = await UploadUtil().downloadFile(msgModel);
  492. if (filePath != null) {
  493. msgModel.localFile = filePath;
  494. SqlUtil().updateLocalFile(msgModel.extraFile, filePath,
  495. isGroup: msgModel.channelType == ChatChannelType.Group.value);
  496. msgModel.state = MsgState.DownloadSuccess;
  497. } else {
  498. print('下载文件失败');
  499. msgModel.state = MsgState.DownloadFailed;
  500. }
  501. }
  502. if (msgModel.sessionId == 10000 ) {
  503. print('收到反馈小助手消息');
  504. }
  505. if (msgModel.sessionId == curActiveSession) {
  506. MessageMgr().emit('New Chat Message', msgModel.sessionId);
  507. }
  508. }
  509. }
  510. static isContainMe(List<BaseUserInfo> members) {
  511. var myId = UserData().basicInfo.userId;
  512. for (var i = 0; i < members.length; i++) {
  513. if (myId == members[i].id) {
  514. print('我在其中');
  515. return true;
  516. }
  517. }
  518. return false;
  519. }
  520. static getGroupNoticeMsg(
  521. GroupChatNotice notice, GroupInfoModel groupInfoModel) {
  522. var showStr = '';
  523. if (groupInfoModel == null) {
  524. print('群不存在');
  525. return '';
  526. }
  527. var myId = UserData().basicInfo.userId;
  528. var optId = notice.operatuId;
  529. List<BaseUserInfo> optedIds = notice.operateduId;
  530. switch (notice.changeType) {
  531. case GroupChangeType.AddMember:
  532. if (optId.id == myId) {
  533. var otherNames = '';
  534. for (var i = 0; i < optedIds.length; i++) {
  535. //获取用户名
  536. var nickName = _getUserName(optedIds[i].id, groupInfoModel.members);
  537. if (otherNames.length == 0) {
  538. otherNames = nickName;
  539. } else {
  540. otherNames = '$otherNames、$nickName';
  541. }
  542. }
  543. showStr = I18n.of(context).you_invite.replaceFirst('/s1', otherNames);
  544. } else {
  545. bool isMySelf = false;
  546. var otherNames = '';
  547. for (var i = 0; i < optedIds.length; i++) {
  548. //获取用户名
  549. isMySelf = myId == optedIds[i].id;
  550. var nickName = _getUserName(optedIds[i].id, groupInfoModel.members);
  551. if (otherNames.length == 0) {
  552. otherNames = nickName;
  553. } else {
  554. otherNames = '$otherNames、$nickName';
  555. }
  556. }
  557. var optName = _getUserName(optId.id, groupInfoModel.members);
  558. if (isMySelf) {
  559. showStr = I18n.of(context).invite_you.replaceFirst('/s1', optName);
  560. } else {
  561. showStr = I18n.of(context)
  562. .invite_someone
  563. .replaceFirst('/s1', optName)
  564. .replaceFirst('/s2', otherNames);
  565. }
  566. }
  567. break;
  568. case GroupChangeType.RemoveMember:
  569. var optName = _getUserName(optId.id, groupInfoModel.members);
  570. if (optId.id == myId) {
  571. optName = I18n.of(context).you;
  572. }
  573. var otherNames = '';
  574. for (var i = 0; i < optedIds.length; i++) {
  575. if (optedIds[i].id == myId) {
  576. otherNames = I18n.of(context).you;
  577. } else {
  578. //获取用户名
  579. var nickName = _getUserName(optedIds[i].id, groupInfoModel.members);
  580. if (otherNames.length == 0) {
  581. otherNames = nickName;
  582. } else {
  583. otherNames = '$otherNames,$nickName';
  584. }
  585. }
  586. }
  587. showStr = I18n.of(context)
  588. .delete_group
  589. .replaceFirst('/s1', optName)
  590. .replaceFirst('/s2', otherNames);
  591. break;
  592. case GroupChangeType.MasterTrans:
  593. var optedName = _getUserName(optedIds.first.id, groupInfoModel.members);
  594. if (optedIds.first.id == myId) {
  595. showStr = I18n.of(context).you_group_owner;
  596. } else {
  597. showStr = I18n.of(context)
  598. .someone_group_owner
  599. .replaceFirst('/s1', optedName);
  600. }
  601. break;
  602. case GroupChangeType.GroupNameChange:
  603. var groupName = notice.changeStr;
  604. var optName = _getUserName(notice.operatuId.id, groupInfoModel.members);
  605. if (notice.operatuId.id == myId) {
  606. showStr = '你 更改群名为 $groupName';
  607. } else {
  608. showStr = '$optName 更改群名为 $groupName';
  609. }
  610. // I18n.of(context).change_group_owner1.replaceFirst('/s1', groupName);
  611. break;
  612. case GroupChangeType.GroupNoticeChange:
  613. print('optId.id ${optId.id}');
  614. showStr = I18n.of(context).update_group_announce;
  615. break;
  616. case GroupChangeType.QRCodeAddMemberNotice:
  617. var optName = _getUserName(optId.id, groupInfoModel.members);
  618. print('optId.id ${optId.id}');
  619. showStr = optId.id == UserData().basicInfo.userId
  620. ? I18n.of(context).you_qr
  621. : I18n.of(context).others_qr.replaceFirst('/s1', optName);
  622. break;
  623. case GroupChangeType.GroupMemberCheckNotice:
  624. var optedName = _getUserName(optId.id, groupInfoModel.members);
  625. print('groupInfoModel.hosterId:${groupInfoModel.hosterId}');
  626. if (myId == groupInfoModel.hosterId) {
  627. showStr = I18n.of(context)
  628. .invite_confirm
  629. .replaceFirst('/s1', optedName)
  630. .replaceFirst('/s2', optedIds.length.toString());
  631. } else {
  632. //获取用户名
  633. var otherNames = '';
  634. for (var i = 0; i < optedIds.length; i++) {
  635. //获取用户名
  636. var nickName = optedIds[i].niceName;
  637. if (otherNames.length == 0) {
  638. otherNames = nickName;
  639. } else {
  640. otherNames = '$otherNames、$nickName';
  641. }
  642. }
  643. showStr = I18n.of(context)
  644. .want_invite_confirm
  645. .replaceFirst('/s1', optedName)
  646. .replaceFirst('/s2', otherNames);
  647. }
  648. break;
  649. case GroupChangeType.GroupMemberCheckAddMemberNotice:
  650. // var optedName = _getUserName(optId.id, groupInfoModel.members);
  651. bool isMy = false;
  652. var otherNames = '';
  653. for (var i = 0; i < optedIds.length; i++) {
  654. if (optedIds[i].id == myId) {
  655. isMy = true;
  656. }
  657. //获取用户名
  658. var nickName = optedIds[i].niceName;
  659. if (otherNames.length == 0) {
  660. otherNames = nickName;
  661. } else {
  662. otherNames = '$otherNames、$nickName';
  663. }
  664. }
  665. if (myId == groupInfoModel.hosterId) {
  666. showStr = I18n.of(context)
  667. .join_group_confirm
  668. .replaceFirst('/s1', otherNames);
  669. } else {
  670. if (isMy) {
  671. showStr = I18n.of(context)
  672. .you_invite_gourp
  673. .replaceFirst('/s1', optId.niceName);
  674. } else {
  675. showStr = I18n.of(context)
  676. .someone_join_group
  677. .replaceFirst('/s1', otherNames);
  678. }
  679. }
  680. break;
  681. case GroupChangeType.GroupIsOpenMemberCheckChange:
  682. showStr = notice.changeBool
  683. ? I18n.of(context).group_setting_tips1
  684. : I18n.of(context).group_setting_tips2;
  685. break;
  686. default:
  687. }
  688. return showStr;
  689. }
  690. static _getUserName(int uId, List<GroupMemberModel> members) {
  691. for (var uItem in members) {
  692. if (uItem.memberId == uId) {
  693. print('用户$uId 的名字 是 ${uItem.refName}');
  694. return uItem.refName;
  695. }
  696. }
  697. return '';
  698. }
  699. static void handlerUnreadMsg(msg) {
  700. var msgContent = PushUserUnreadMsgNotice.fromBuffer(msg);
  701. var noticeList = msgContent.notices;
  702. ChatDataMgr().updateRecordWithUnreadMsg(noticeList);
  703. }
  704. static handlerServerMsg(int comId, int msgId, List<int> content) {
  705. switch (comId) {
  706. case ComId.Chat:
  707. if (msgId == 2) {
  708. //发送消息成功回应
  709. var msgContent = ChatSendRes.fromBuffer(content);
  710. if (msgContent.errorCode == 0 ||
  711. msgContent.errorCode == 17 ||
  712. msgContent.errorCode == 16) {
  713. print('发送聊天消息成功');
  714. ChatDataMgr().updateMsgState(
  715. msgContent.targetId,
  716. msgContent.sendTime.toInt(),
  717. msgContent.channelType.value,
  718. MsgState.SendingSuccess);
  719. //去除缓存
  720. for (var i = 0; i < sendCache.length; i++) {
  721. MsgModel msg = sendCache[i];
  722. if (msgContent.targetId == msg.sessionId &&
  723. msgContent.sendTime.toInt() == msg.time) {
  724. msg.state = MsgState.SendingSuccess;
  725. sendCache.remove(msg);
  726. break;
  727. }
  728. }
  729. } else {
  730. if (msgContent.errorCode == 3001) {
  731. print('用户没有登录,重新登录');
  732. NetWork().reLogin();
  733. } else {
  734. ChatDataMgr().updateMsgState(
  735. msgContent.targetId,
  736. msgContent.sendTime.toInt(),
  737. msgContent.channelType.value,
  738. MsgState.SendingFailed);
  739. for (var i = 0; i < sendCache.length; i++) {
  740. MsgModel msg = sendCache[i];
  741. if (msgContent.targetId == msg.sessionId &&
  742. msgContent.sendTime.toInt() == msg.time) {
  743. msg.state = MsgState.SendingFailed;
  744. break;
  745. }
  746. }
  747. }
  748. }
  749. } else if (msgId == 3) {
  750. var msgContent = PushChat.fromBuffer(content);
  751. // print('收到聊天消息');
  752. ackServerMsg(msgContent.sendTime);
  753. handlerReceiveMsg(msgContent);
  754. } else if (msgId == 4) {
  755. print('处理未读消息汇总');
  756. handlerUnreadMsg(content);
  757. } else if (msgId == 9) {
  758. print('切换人工翻译状态通知');
  759. receiveTranslateState(content);
  760. } else if (msgId == 11) {
  761. //
  762. var msgContent = RequestRealtimeCallRes.fromBuffer(content);
  763. if (msgContent.errorCode == 0) {
  764. print('发送连麦消息成功');
  765. // showToast('发送连麦消息成功');
  766. } else {
  767. print('发送连麦消息失败');
  768. MessageMgr().emit('AudioChat Failed');
  769. }
  770. } else if (msgId == 12) {
  771. var msgContent = PushRealtimeCall.fromBuffer(content);
  772. var friendId = msgContent.sUserId;
  773. print('收到连麦消息 $friendId');
  774. //只能一次接收一个人的连麦
  775. if (!isAudioConnect) {
  776. LocalNotificationUtil.instance
  777. .show(I18n.of(context).notice, I18n.of(context).new_video_msg);
  778. playAudioRing();
  779. MessageMgr().emit('Receive AudioChat Request', friendId);
  780. }
  781. } else if (msgId == 14) {
  782. var msgContent = PushRealtimeCallRespond.fromBuffer(content);
  783. var friendId = msgContent.tUserId;
  784. print('收到连麦消息 $friendId');
  785. bool isAnswer = msgContent.isAnswer;
  786. stopAudioRing();
  787. if (!isAnswer) {
  788. audioChatRequestFriendId = 0;
  789. }
  790. MessageMgr().emit(
  791. 'AudioChat State', {'fdId': friendId, 'isAnswer': isAnswer});
  792. } else if (msgId == 18) {
  793. var res = PushGiftGiving.fromBuffer(content);
  794. print('收到礼物:${res.sendUserId} , ${res.giftId} ,${res.giftAmount}');
  795. MessageMgr().emit("Receive Gift", res);
  796. } else if (msgId == 103) {
  797. print('收到会话成员信息');
  798. } else if (msgId == 202) {
  799. handleCreateGroup(content);
  800. } else if (msgId == 204) {
  801. handlerQuitGroup(content);
  802. } else if (msgId == 206) {
  803. handelerQueryGroupInfoRes(content);
  804. } else if (msgId == 208) {
  805. handlerAddGroupMemberRes(content);
  806. } else if (msgId == 210) {
  807. handlerRemoveGroupMemberRes(content);
  808. } else if (msgId == 212) {
  809. handlerUpdateGroupNoticeRes(content);
  810. } else if (msgId == 214) {
  811. handlerUpdateGroupNameRes(content);
  812. } else if (msgId == 216) {
  813. handlerUpdateMemberRefName(content);
  814. } else if (msgId == 218) {
  815. handlerGetGroupListRes(content);
  816. } else if (msgId == 220) {
  817. handlerSetGroupSwitch(content);
  818. } else if (msgId == 222) {
  819. handlerJoinGroupRes(content);
  820. } else if (msgId == 224) {
  821. handlerUpdateGroupHoster(content);
  822. } else if (msgId == 226) {
  823. handlerAgreeMember(content);
  824. } else if (msgId == 228) {
  825. handlerUpdateMemberMsgFree(content);
  826. }else if (msgId == 230) {
  827. handlerGroupIsShowMenberNiceName(content);
  828. }
  829. break;
  830. case ComId.TranslateOrder:
  831. if(msgId==2){
  832. handlerCreateTranslateOrder(content);
  833. }else if(msgId ==4){
  834. handlerReceiveOrder(content);
  835. }else if(msgId ==6){
  836. handlerCancelTranslateOrder(content);
  837. }else if(msgId==20){
  838. handlerDeliveryInterpreterOrderPush(content);
  839. }
  840. break;
  841. case ComId.PushMsg:
  842. String msg = PushNetRelay.fromBuffer(content).msg;
  843. print('接受的推送消息:msg $msg');
  844. Map map = json.decode(msg);
  845. String type = map['type'];
  846. switch (type) {
  847. case 'notice':
  848. ///由于极光本地推送点击事件无反应,暂时不走这,由远端推
  849. String messageJson = map['message'];
  850. Map messageMap = json.decode(messageJson);
  851. Map ext = json.decode(messageMap['extparameters']);
  852. print('ext $ext}');
  853. LocalNotificationUtil.instance.showOtherNotification(
  854. ext, messageMap['title'], messageMap['content']);
  855. break;
  856. case 'friends':
  857. FriendListMgr().getFriendListFromServer();
  858. MessageMgr().emit('Add friend');
  859. break;
  860. case 'deletedata':
  861. print('收到清空用户聊天记录通知');
  862. GroupInfoMgr().deleteAllGroup();
  863. ChatDataMgr().deleteAllRecord();
  864. FriendListMgr().deleteAllFriend();
  865. Navigator.of(context).pushAndRemoveUntil(new MaterialPageRoute(
  866. builder: (context) {
  867. return IndexPage();
  868. },
  869. ), (route) => route == null);
  870. NetWork().singOut();
  871. UserData().reset();
  872. break;
  873. case 'blacklist':
  874. String messageJson = map['message'];
  875. Map messageMap = json.decode(messageJson);
  876. if (messageMap['Status'] == 0) {
  877. BlacklistMgr.addBlackListMe(messageMap['UserId']);
  878. } else {
  879. BlacklistMgr.removeBalckListMe(messageMap['UserId']);
  880. }
  881. break;
  882. }
  883. break;
  884. default:
  885. }
  886. }
  887. //设置群验证开关
  888. static setGroupSwitch(int groupId, bool isCheck) {
  889. print('设置群验证开关 $isCheck');
  890. var seq = SettingGroupReq.create();
  891. seq.groupId = groupId;
  892. seq.isOpenMemberCheck = isCheck;
  893. NetWork().sendMsg(ComId.Chat, 219, seq);
  894. }
  895. //设置群验证开关结果
  896. static handlerSetGroupSwitch(List<int> msgContent) {
  897. print('设置群验证开关结果');
  898. var res = SettingGroupRes.fromBuffer(msgContent);
  899. if (res.errorCode == 0) {
  900. print('设置群验证开关结果成功');
  901. } else {
  902. print('设置群验证开关结果失败${res.errorCode}');
  903. }
  904. }
  905. //退出群
  906. static quitGroup(int groupId) {
  907. print('退出群');
  908. var seq = QuitChatGroupReq.create();
  909. seq.groupId = groupId;
  910. NetWork().sendMsg(ComId.Chat, 203, seq);
  911. }
  912. static handlerQuitGroup(List<int> msgContent) {
  913. print('退出群结果');
  914. var res = QuitChatGroupRes.fromBuffer(msgContent);
  915. if (res.errorCode == 0) {
  916. print('退出群结果成功 ${res.groupId}');
  917. } else {
  918. print('退出群结果失败${res.errorCode}');
  919. }
  920. }
  921. //添加群成员
  922. static addGroupMember(int groupId, List<int> uIdList) {
  923. print('##发送207 添加群成员------');
  924. var seq = AddGroupMemberReq.create();
  925. seq.groupId = groupId;
  926. seq.userIds.addAll(uIdList);
  927. NetWork().sendMsg(ComId.Chat, 207, seq);
  928. }
  929. //添加群成员结果
  930. static handlerAddGroupMemberRes(List<int> msgContent) {
  931. var res = AddGroupMemberRes.fromBuffer(msgContent);
  932. print('##发送返回 添加群成员 res.errorCode:${res.errorCode}');
  933. if (res.errorCode == 0) {
  934. MessageMgr().emit('Update Group Info');
  935. print('添加群成员成功');
  936. } else {
  937. switch (res.errorCode) {
  938. case 3007:
  939. showToast(I18n.of(context).members_max);
  940. break;
  941. default:
  942. }
  943. print('添加群成员失败');
  944. }
  945. }
  946. //扫码加入群
  947. static joinGroup(int groupId) {
  948. print('添加群成员');
  949. var seq = GroupQRcodeAddMemberReq.create();
  950. seq.groupId = groupId;
  951. NetWork().sendMsg(ComId.Chat, 221, seq);
  952. }
  953. //扫码加入群结果
  954. static handlerJoinGroupRes(List<int> msgContent) async {
  955. print('扫码加入群结果');
  956. var res = GroupQRcodeAddMemberRes.fromBuffer(msgContent);
  957. if (res.errorCode == 0) {
  958. print('扫码加入群结果成功');
  959. var groupInfoModel = GroupInfoModel.fromInfo(res.group);
  960. GroupInfoMgr().addGroup(groupInfoModel);
  961. Navigator.pushReplacement(context,
  962. MaterialPageRoute<void>(builder: (BuildContext context) {
  963. return GroupChatPage(
  964. key: Key('GroupChat'), groupInfoModel: groupInfoModel);
  965. }));
  966. } else {
  967. switch (res.errorCode) {
  968. case 3007:
  969. showToast(I18n.of(context).members_max);
  970. break;
  971. default:
  972. }
  973. print('扫码加入群结果失败${res.errorCode}');
  974. }
  975. }
  976. //移出群成员
  977. static removeGroupMember(int groupId, List<int> uIdList) {
  978. print('添加群成员');
  979. var seq = RemoveGroupMemberReq.create();
  980. seq.groupId = groupId;
  981. seq.userIds.addAll(uIdList);
  982. NetWork().sendMsg(ComId.Chat, 209, seq);
  983. }
  984. //移出群成员结果
  985. static handlerRemoveGroupMemberRes(List<int> msgContent) {
  986. print('移出群成员结果');
  987. var res = RemoveGroupMemberRes.fromBuffer(msgContent);
  988. if (res.errorCode == 0) {
  989. MessageMgr().emit('Update Group Info');
  990. print('移出群成员结果成功');
  991. } else {
  992. print('移出群成员结果失败${res.errorCode}');
  993. }
  994. }
  995. //修改群公告
  996. static updateGroupNotice(int groupId, String notice) {
  997. print('修改群公告');
  998. var seq = ModifyGroupNoticeReq.create();
  999. seq.groupId = groupId;
  1000. seq.notice = notice;
  1001. NetWork().sendMsg(ComId.Chat, 211, seq);
  1002. }
  1003. //修改群公告结果
  1004. static handlerUpdateGroupNoticeRes(List<int> msgContent) {
  1005. print('修改群公告结果');
  1006. var res = ModifyGroupNoticeRes.fromBuffer(msgContent);
  1007. if (res.errorCode == 0) {
  1008. print('修改群公告结果成功');
  1009. } else {
  1010. print('修改群公告结果失败${res.errorCode}');
  1011. }
  1012. }
  1013. //修改群名称请求
  1014. static updateGroupName(int groupId, String name) {
  1015. print('修改群名称请求');
  1016. var seq = ModifyGroupNameReq.create();
  1017. seq.groupId = groupId;
  1018. seq.name = name;
  1019. NetWork().sendMsg(ComId.Chat, 213, seq);
  1020. }
  1021. //修改群名称请求结果
  1022. static handlerUpdateGroupNameRes(List<int> msgContent) {
  1023. print('修改群名称请求结果');
  1024. var res = ModifyGroupNameRes.fromBuffer(msgContent);
  1025. if (res.errorCode == 0) {
  1026. print('修改群名称请求成功');
  1027. } else {
  1028. showToast(I18n.of(context).fail);
  1029. print('修改群名称请求失败${res.errorCode}');
  1030. }
  1031. }
  1032. //修改群个人别名请求
  1033. static updateMemberRefName(int groupId, String refName) {
  1034. print('修改群个人别名请求$groupId');
  1035. var seq = GroupMemberModifyAliasReq.create();
  1036. seq.groupId = groupId;
  1037. seq.name = refName;
  1038. NetWork().sendMsg(ComId.Chat, 215, seq);
  1039. }
  1040. //修改群个人别名请求结果
  1041. static handlerUpdateMemberRefName(List<int> msgContent) {
  1042. print('修改群个人别名请求结果');
  1043. var res = GroupMemberModifyAliasRes.fromBuffer(msgContent);
  1044. if (res.errorCode == 0) {
  1045. print('修改群个人别名请求结果成功');
  1046. } else {
  1047. print('修改群个人别名请求结果失败${res.errorCode}');
  1048. }
  1049. }
  1050. //群主转让其他人
  1051. static updateGroupHoster(int groupId, int uId) {
  1052. print('群主转让其他人');
  1053. var seq = GroupMasterTransReq.create();
  1054. seq.groupId = groupId;
  1055. seq.userId = uId;
  1056. NetWork().sendMsg(ComId.Chat, 223, seq);
  1057. }
  1058. //群主转让其他人结果
  1059. static handlerUpdateGroupHoster(List<int> msgContent) {
  1060. print('群主转让其他人结果');
  1061. var res = GroupMasterTransRes.fromBuffer(msgContent);
  1062. if (res.errorCode == 0) {
  1063. MessageMgr().emit('Update Group Info');
  1064. print('群主转让其他人结果成功');
  1065. } else {
  1066. print('群主转让其他人结果失败${res.errorCode}');
  1067. }
  1068. }
  1069. //群主批准其他人加入群
  1070. static agreeMember(int groupId, List<int> uId) {
  1071. print('群主批准其他人加入群 groupId:$groupId uId: $uId}');
  1072. var seq = GroupMasterCheckAddMemberReq.create();
  1073. seq.groupId = groupId;
  1074. seq.userIds.addAll(uId);
  1075. NetWork().sendMsg(ComId.Chat, 225, seq);
  1076. }
  1077. //是否显示群昵称
  1078. static setGroupIsShowMenberNiceNameReq(int groupId, bool isShow) {
  1079. print('设置是否显示群昵称 groupId:$groupId isShow: $isShow');
  1080. var seq = SetGroupIsShowMenberNiceNameReq.create();
  1081. seq.groupId = groupId;
  1082. seq.isShowMenberNiceName=isShow;
  1083. NetWork().sendMsg(ComId.Chat, 229, seq);
  1084. }
  1085. //发布翻译管家帮助订单
  1086. static sendCreateTranslateOrder(int fromLanguage,int toLanguage,int scences,String extraDesc) {
  1087. debugPrint('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' );
  1088. var seq = IssueTransHKOrderReq.create();
  1089. seq.tLanguage = fromLanguage|toLanguage;
  1090. seq.scenes =scences;
  1091. seq.desc = extraDesc;
  1092. TranslateHKMgr().isUser=true;
  1093. NetWork().sendMsg(ComId.TranslateOrder, 1, seq);
  1094. }
  1095. //发布翻译管家帮助订单回应
  1096. static handlerCreateTranslateOrder(List<int> msgContent) {
  1097. debugPrint('发布翻译管家帮助订单回应');
  1098. // LoadingManage().closeLoading();
  1099. var res = IssueTransHKOrderRes.fromBuffer(msgContent);
  1100. if (res.errorCode == 0) {
  1101. TranslateHKMgr().orderId = res.orderId;
  1102. TranslateHKMgr().waitNum = res.waitNum;
  1103. TranslateHKMgr().orderStatus=TranslateHKMgr.ORDER_STATUS_WAITING;
  1104. MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER);
  1105. // GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1106. debugPrint('发布翻译管家帮助订单回应-订单号: ${res.orderId} 等待人数 ${res.waitNum}');
  1107. } else {
  1108. debugPrint('发布翻译管家帮助订单失败 ${res.errorCode}');
  1109. }
  1110. }
  1111. //撤销订单消息
  1112. static sendCancelTranslateOrder( ) {
  1113. debugPrint('取消订单 orderid:${TranslateHKMgr().orderId}' );
  1114. var seq = CancellationTransHKOrderReq.create();
  1115. seq.orderId = TranslateHKMgr().orderId;
  1116. NetWork().sendMsg(ComId.TranslateOrder, 5, seq);
  1117. }
  1118. //撤销订单消息回应
  1119. static handlerCancelTranslateOrder(List<int> msgContent) {
  1120. debugPrint('撤销订单消息回应');
  1121. var res = CancellationTransHKOrderRes.fromBuffer(msgContent);
  1122. if (res.errorCode == 0) {
  1123. debugPrint('撤销订单消息回应成功: ${res.orderId}');
  1124. } else {
  1125. debugPrint('撤销订单消息回应成功失败${res.errorCode}');
  1126. }
  1127. }
  1128. //派送订单推送
  1129. static handlerDeliveryInterpreterOrderPush(List<int> msgContent) {
  1130. debugPrint('派送订单推送');
  1131. var res = DeliveryTransHKOrderPush.fromBuffer(msgContent);
  1132. print('OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}');
  1133. TranslateOrder order = new TranslateOrder();
  1134. order.orderId=res.orderId;
  1135. order.desc=res.desc;
  1136. order.createTime=res.createTime.toInt();
  1137. order.tLanguage=res.tLanguage.toInt();
  1138. order.scenes=res.scenes.toInt();
  1139. TranslateHKMgr().order = order;
  1140. MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, res);
  1141. }
  1142. //接收订单请求
  1143. static sendReceiveOrder( ) {
  1144. TranslateOrder order = TranslateHKMgr().order;
  1145. debugPrint('接收订单消息请求 orderId:${order.orderId}' );
  1146. var seq = ReceivingTransHKOrderReq.create();
  1147. seq.orderId = order.orderId;
  1148. NetWork().sendMsg(ComId.TranslateOrder,3, seq);
  1149. }
  1150. //接收订单消息回应
  1151. static handlerReceiveOrder(List<int> msgContent) {
  1152. debugPrint('接收订单消息回应');
  1153. var res = ReceivingTransHKOrderRes.fromBuffer(msgContent);
  1154. if (res.errorCode == 0) {
  1155. // GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1156. debugPrint('接收订单消息回应成功: ');
  1157. } else {
  1158. debugPrint('接收订单消息回应失败${res.errorCode}');
  1159. }
  1160. }
  1161. ///翻译官价聊天开始推送
  1162. static handlerTranslateStart(List<int> msgContent) {
  1163. debugPrint('翻译官价聊天开始推送');
  1164. // var res = TransHKChatStartPush.fromBuffer(msgContent);
  1165. }
  1166. //消息免打扰请求结果
  1167. static handlerGroupIsShowMenberNiceName(List<int> msgContent) {
  1168. print('设置是否显示群昵称');
  1169. var res = SetGroupIsShowMenberNiceNameRes.fromBuffer(msgContent);
  1170. if (res.errorCode == 0) {
  1171. // GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1172. print('设置是否显示群昵称成功');
  1173. } else {
  1174. print('消息免打扰请求结果失败${res.errorCode}');
  1175. }
  1176. }
  1177. //消息免打扰请求结果
  1178. static handlerUpdateMemberMsgFree(List<int> msgContent) {
  1179. print('消息免打扰请求结果');
  1180. var res = SetGroupMasterMessageFreeRes.fromBuffer(msgContent);
  1181. if (res.errorCode == 0) {
  1182. GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1183. print('消息免打扰请求结果成功');
  1184. } else {
  1185. print('消息免打扰请求结果失败${res.errorCode}');
  1186. }
  1187. }
  1188. //群主批准其他人加入群结果
  1189. static handlerAgreeMember(List<int> msgContent) {
  1190. print('群主批准其他人加入群结果');
  1191. var res = GroupMasterCheckAddMemberRes.fromBuffer(msgContent);
  1192. if (res.errorCode == 0) {
  1193. print('群主批准其他人加入群结果成功');
  1194. } else {
  1195. switch (res.errorCode) {
  1196. case 3007:
  1197. showToast('群成员已满');
  1198. break;
  1199. default:
  1200. }
  1201. }
  1202. }
  1203. //消息免打扰请求
  1204. static updateMemberMsgFreeReq(int groupId, bool isAvoid) {
  1205. print('消息免打扰请求');
  1206. var seq = SetGroupMasterMessageFreeReq.create();
  1207. seq.groupId = groupId;
  1208. seq.messageFree = isAvoid;
  1209. NetWork().sendMsg(ComId.Chat, 227, seq);
  1210. }
  1211. //请求群列表求结果
  1212. static handlerGetGroupListRes(List<int> msgContent) async {
  1213. var res = QueryUserRelationGroupRes.fromBuffer(msgContent);
  1214. if (res.relationGroup == null) {
  1215. print('服务器也没有群存在');
  1216. return;
  1217. }
  1218. for (var i = 0; i < res.relationGroup.length; i++) {
  1219. var group = GroupInfoModel.fromInfo(res.relationGroup[i]);
  1220. print('群id ${group.sessionId}');
  1221. GroupInfoMgr().addGroup(group);
  1222. }
  1223. MessageMgr().emit('Update Group List');
  1224. }
  1225. //查询聊天群信息
  1226. static queryGroupInfo(int groupId) {
  1227. print('查询聊天群信息');
  1228. var seq = QueryChatGroupReq.create();
  1229. seq.groupId = groupId;
  1230. NetWork().sendMsg(ComId.Chat, 205, seq);
  1231. }
  1232. //查询聊天群信息结果
  1233. static handelerQueryGroupInfoRes(List<int> msgContent) async {
  1234. print('处理查询聊天群信息结果');
  1235. var res = QueryChatGroupRes.fromBuffer(msgContent);
  1236. if (res.errorCode == 0) {
  1237. print('获取群信息成功');
  1238. var groupInfo = GroupInfoModel.fromInfo(res.group);
  1239. print('开始创建群头像');
  1240. GroupInfoMgr().addGroup(groupInfo);
  1241. } else {
  1242. print('获取群信息失败');
  1243. switch (res.errorCode) {
  1244. case 3006:
  1245. showToast(I18n.of(context).group_max);
  1246. break;
  1247. default:
  1248. showToast(I18n.of(context).fail);
  1249. }
  1250. }
  1251. }
  1252. static playAudioRing() {
  1253. ringTimer = Timer.periodic(Duration(milliseconds: 2200), (timer) {
  1254. SoundUtils().play(
  1255. 'http://testcyhd.chengyouhd.com/Upload/Audio/even_wheat_sound.mp3',
  1256. isLocal: false);
  1257. });
  1258. }
  1259. static stopAudioRing() {
  1260. ringTimer?.cancel();
  1261. }
  1262. static ackServerMsg(Int64 msgId) {
  1263. var seq = AnswerPushChat.create();
  1264. seq.msgId = msgId;
  1265. NetWork().sendMsg(ComId.Chat, 100, seq);
  1266. }
  1267. ///服务端已作废
  1268. // static swtichTranslateState(TranslateState transState) {
  1269. // print('请求切换人工翻译状态');
  1270. // var seq = RequestSetHTranslReq.create();
  1271. // seq.sessionId = curActiveSession;
  1272. // seq.hTransl = transState;
  1273. //
  1274. // NetWork().sendMsg(ComId.Chat, 7, seq);
  1275. // }
  1276. static void receiveTranslateState(msg) {
  1277. var res = PushHTranslState.fromBuffer(msg);
  1278. if (res.sessionId == curActiveSession) {
  1279. MessageMgr().emit("Update Translate State", res);
  1280. }
  1281. }
  1282. static void sendAudioChatReq(int friendId) {
  1283. var seq = RequestRealtimeCallReq.create();
  1284. seq.tUserId = friendId;
  1285. seq.cType = ChatType.RealtimeCallVoiceType;
  1286. NetWork().sendMsg(ComId.Chat, 10, seq);
  1287. }
  1288. static void sendReplyAudioChatReq(int friendId, bool isReply) {
  1289. var seq = RespondRealtimeCallReq.create();
  1290. seq.sUserId = friendId;
  1291. seq.isAnswer = isReply;
  1292. NetWork().sendMsg(ComId.Chat, 13, seq);
  1293. }
  1294. //打赏礼物
  1295. static sendGiftTo(int friendId, int giftId, int giftAmount, int total) {
  1296. var seq = RequestGiftGivingReq.create();
  1297. seq.targetUserId = friendId;
  1298. seq.giftId = giftId;
  1299. seq.giftAmount = giftAmount;
  1300. seq.money = total;
  1301. NetWork().sendMsg(ComId.Chat, 17, seq);
  1302. }
  1303. static clear() {
  1304. curActiveSession = 0;
  1305. isTranslate = false;
  1306. isAudioConnect = false;
  1307. sendCache.clear();
  1308. }
  1309. }