Hibok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

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