WebSocket.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. MWF.xDesktop = MWF.xDesktop || {};
  2. MWF.xApplication = MWF.xApplication || {};
  3. MWF.require("MWF.xDesktop.Actions.RestActions", null, false);
  4. MWF.xDesktop.WebSocket = new Class({
  5. Implements: [Options, Events],
  6. options: {},
  7. initialize: function(options){
  8. debugger;
  9. var addressObj = layout.desktop.serviceAddressList["x_message_assemble_communicate"];
  10. this.ws = "ws://"+addressObj.host+(addressObj.port==80 ? "" : ":"+addressObj.port)+addressObj.context+"/ws/collaboration";
  11. // var addressObj = layout.desktop.serviceAddressList["x_collaboration_assemble_websocket"];
  12. // this.ws = "ws://"+addressObj.host+(addressObj.port==80 ? "" : ":"+addressObj.port)+addressObj.context+"/ws/collaboration";
  13. //var ws = "ws://hbxa01.bf.ctc.com/x_collaboration_assemble_websocket/ws/collaboration";
  14. //使用轮询方式处理消息.....
  15. // this.webSocket = {
  16. // "readyState":"1",
  17. // "close": function(){},
  18. // "open": function(){}
  19. // };
  20. // window.setInterval(function(){
  21. // o2.Actions.get("")
  22. // }, 10000);
  23. ///*暂时不启用WebSocket了------------
  24. this.ws = this.ws+"?x-token="+encodeURIComponent(Cookie.read("x-token"))+"&authorization="+encodeURIComponent(Cookie.read("x-token"));
  25. try{
  26. this.webSocket = new WebSocket(this.ws);
  27. }catch(e){
  28. //WebSocket.close();
  29. //this.webSocket = new WebSocket(this.ws);
  30. if (this.webSocket){
  31. this.close();
  32. this.webSocket = new WebSocket(this.ws);
  33. }
  34. }
  35. //this.webSocket = new WebSocket(this.ws);
  36. this.webSocket.onopen = function (e){this.onOpen(e);}.bind(this);
  37. this.webSocket.onclose = function (e){this.onClose(e);}.bind(this);
  38. this.webSocket.onmessage = function (e){this.onMessage(e);}.bind(this);
  39. this.webSocket.onerror = function (e){this.onError(e);}.bind(this);
  40. //---------------------------------*/
  41. },
  42. onOpen: function(e){
  43. //MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, "websocket is open ...");
  44. },
  45. onClose: function(e){
  46. //MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, "websocket is closed ...");
  47. },
  48. onMessage: function(e){
  49. debugger;
  50. if (e.data){
  51. try{
  52. var data = JSON.decode(e.data);
  53. switch (data.category){
  54. case "dialog":
  55. switch (data.type){
  56. case "text":
  57. this.receiveChatMessage(data);
  58. break;
  59. default:
  60. }
  61. break;
  62. default:
  63. switch (data.type){
  64. case "task":
  65. case "task_create":
  66. case "task_urge":
  67. case "task_expire":
  68. case "task_press":
  69. this.receiveTaskMessage(data);
  70. break;
  71. case "read":
  72. case "read_create":
  73. this.receiveReadMessage(data);
  74. break;
  75. case "review":
  76. this.receiveReviewMessage(data);
  77. break;
  78. case "fileEditor":
  79. case "attachment_editor":
  80. case "attachment_editorCancel":
  81. case "attachment_editorModify":
  82. this.receiveFileEditorMessage(data);
  83. break;
  84. case "fileShare":
  85. case "attachment_share":
  86. case "attachment_shareCancel":
  87. this.receiveFileShareMessage(data);
  88. break;
  89. case "meetingInvite":
  90. case "meeting_invite":
  91. this.receiveMeetingInviteMessage(data);
  92. break;
  93. case "meetingCancel":
  94. case "meeting_cancel":
  95. this.receiveMeetingCancelMessage(data);
  96. break;
  97. case "meetingAccept":
  98. case "meeting_accept":
  99. this.receiveMeetingAcceptMessage(data);
  100. break;
  101. case "meetingReject":
  102. case "meeting_reject":
  103. this.receiveMeetingRejectMessage(data);
  104. break;
  105. case "attendanceAppealInvite":
  106. this.receiveAttendanceAppealInviteMessage(data);
  107. break;
  108. case "attendanceAppealAccept":
  109. this.receiveAttendanceAppealAcceptMessage(data);
  110. break;
  111. case "attendanceAppealReject":
  112. this.receiveAttendanceAppealRejectMessage(data);
  113. break;
  114. case "calendar_alarm":
  115. this.receiveAttendanceAppealRejectMessage(data);
  116. break;
  117. case "custom_create":
  118. this.receiveCustomMessage(data);
  119. break;
  120. default:
  121. }
  122. }
  123. }catch(e){}
  124. }
  125. },
  126. onError: function(e){
  127. //MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, "websocket is error ...");
  128. },
  129. close: function(){
  130. if (this.webSocket) this.webSocket.close();
  131. //WebSocket.close();
  132. },
  133. send: function(msg){
  134. // if (!this.webSocket || this.webSocket.readyState != 1) {
  135. // this.initialize();
  136. // }
  137. // try{
  138. // this.webSocket.send(JSON.encode(msg));
  139. // }catch(e){
  140. // this.initialize();
  141. // this.webSocket.send(JSON.encode(msg));
  142. // }
  143. },
  144. receiveChatMessage: function(data){
  145. if (layout.desktop.widgets["IMIMWidget"]) layout.desktop.widgets["IMIMWidget"].receiveChatMessage(data);
  146. //if (layout.desktop.top.userPanel) layout.desktop.top.userPanel.receiveChatMessage(data);
  147. },
  148. openWork: function(id, e){
  149. o2.Actions.get("x_processplatform_assemble_surface").getWorkInfor(id, function(){
  150. var options = {"workId": id, "appId": "process.Work"+id};
  151. layout.desktop.openApplication(e, "process.Work", options);
  152. }.bind(this), function(){
  153. layout.desktop.openApplication(e, "process.TaskCenter", null, {
  154. "status": {
  155. "navi": "task"
  156. }
  157. });
  158. }.bind(this));
  159. },
  160. receiveTaskMessage: function(data){
  161. var task = data.body;
  162. //var content = MWF.LP.desktop.messsage.receiveTask+"《"+task.title+"》, "+MWF.LP.desktop.messsage.activity+": <font style='color: #ea621f'>"+(task.activityName || "")+"</font>";
  163. var content = data.title;
  164. content += "<br/><font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.appliction+": </font><font style='color: #ea621f'>"+task.applicationName+"</font>; "+
  165. "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.process+": </font><font style='color: #ea621f'>"+task.processName+"</font>";
  166. var msg = {
  167. "subject": MWF.LP.desktop.messsage.taskMessage,
  168. "content": content
  169. };
  170. var messageItem = layout.desktop.message.addMessage(msg);
  171. var tooltipItem = layout.desktop.message.addTooltip(msg);
  172. tooltipItem.contentNode.addEvent("click", function(e){
  173. layout.desktop.message.hide();
  174. this.openWork(task.work,e);
  175. }.bind(this));
  176. messageItem.contentNode.addEvent("click", function(e){
  177. layout.desktop.message.addUnread(-1);
  178. layout.desktop.message.hide();
  179. this.openWork(task.work,e);
  180. }.bind(this));
  181. },
  182. receiveReadMessage: function(data){
  183. var read = data.body;
  184. //var content = MWF.LP.desktop.messsage.receiveRead+"《"+read.title+"》. ";
  185. var content = data.title;
  186. content += "<br/><font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.appliction+": </font><font style='color: #ea621f'>"+read.applicationName+"</font>; "+
  187. "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.process+": </font><font style='color: #ea621f'>"+read.processName+"</font>";
  188. var msg = {
  189. "subject": MWF.LP.desktop.messsage.readMessage,
  190. "content": content
  191. };
  192. var messageItem = layout.desktop.message.addMessage(msg);
  193. var tooltipItem = layout.desktop.message.addTooltip(msg);
  194. tooltipItem.contentNode.addEvent("click", function(e){
  195. layout.desktop.message.hide();
  196. this.openWork(read.work,e);
  197. }.bind(this));
  198. messageItem.contentNode.addEvent("click", function(e){
  199. layout.desktop.message.addUnread(-1);
  200. layout.desktop.message.hide();
  201. this.openWork(read.work,e);
  202. }.bind(this));
  203. },
  204. receiveCustomMessage: function(data){
  205. var content = "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.customMessage+"</font>"+data.body;
  206. var msg = {
  207. "subject": MWF.LP.desktop.messsage.readMessage,
  208. "content": content
  209. };
  210. var messageItem = layout.desktop.message.addMessage(msg);
  211. var tooltipItem = layout.desktop.message.addTooltip(msg);
  212. },
  213. receiveReviewMessage: function(data){
  214. var content = MWF.LP.desktop.messsage.receiveReview+"《"+data.title+"》. ";
  215. content += "<br/><font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.appliction+": </font><font style='color: #ea621f'>"+data.applicationName+"</font>; "+
  216. "<font style='color: #333; font-weight: bold'>"+MWF.LP.desktop.messsage.process+": </font><font style='color: #ea621f'>"+data.processName+"</font>";
  217. var msg = {
  218. "subject": MWF.LP.desktop.messsage.reviewMessage,
  219. "content": content
  220. };
  221. var messageItem = layout.desktop.message.addMessage(msg);
  222. var tooltipItem = layout.desktop.message.addTooltip(msg);
  223. tooltipItem.contentNode.addEvent("click", function(e){
  224. layout.desktop.message.hide();
  225. layout.desktop.openApplication(e, "process.TaskCenter", null, {
  226. "status": {
  227. "navi": "review"
  228. }
  229. });
  230. });
  231. messageItem.contentNode.addEvent("click", function(e){
  232. layout.desktop.message.addUnread(-1);
  233. layout.desktop.message.hide();
  234. layout.desktop.openApplication(e, "process.TaskCenter", null, {
  235. "status": {
  236. "navi": "review"
  237. }
  238. });
  239. });
  240. },
  241. receiveFileEditorMessage: function(data){
  242. var content = "<font style='color: #ea621f; font-weight: bold'>"+data.person+"</font> "+MWF.LP.desktop.messsage.receiveFileEditor+"“"+data.name+"”. ";
  243. var msg = {
  244. "subject": MWF.LP.desktop.messsage.fileEditorMessage,
  245. "content": content
  246. };
  247. var messageItem = layout.desktop.message.addMessage(msg);
  248. var tooltipItem = layout.desktop.message.addTooltip(msg);
  249. tooltipItem.contentNode.addEvent("click", function(e){
  250. layout.desktop.message.hide();
  251. layout.desktop.openApplication(e, "File", null, {
  252. "status": {
  253. "tab": "editor",
  254. "node": data.person
  255. }
  256. });
  257. });
  258. messageItem.contentNode.addEvent("click", function(e){
  259. layout.desktop.message.addUnread(-1);
  260. layout.desktop.message.hide();
  261. layout.desktop.openApplication(e, "File", null, {
  262. "status": {
  263. "tab": "editor",
  264. "node": data.person
  265. }
  266. });
  267. });
  268. },
  269. receiveFileShareMessage: function(data){
  270. var content = "<font style='color: #ea621f; font-weight: bold'>"+data.person+"</font> "+MWF.LP.desktop.messsage.receiveFileShare+"“"+data.name+"”. ";
  271. var msg = {
  272. "subject": MWF.LP.desktop.messsage.fileShareMessage,
  273. "content": content
  274. };
  275. var messageItem = layout.desktop.message.addMessage(msg);
  276. var tooltipItem = layout.desktop.message.addTooltip(msg);
  277. tooltipItem.contentNode.addEvent("click", function(e){
  278. layout.desktop.message.hide();
  279. layout.desktop.openApplication(e, "File", null, {
  280. "status": {
  281. "tab": "share",
  282. "node": data.person
  283. }
  284. });
  285. });
  286. messageItem.contentNode.addEvent("click", function(e){
  287. layout.desktop.message.addUnread(-1);
  288. layout.desktop.message.hide();
  289. layout.desktop.openApplication(e, "File", null, {
  290. "status": {
  291. "tab": "share",
  292. "node": data.person
  293. }
  294. });
  295. });
  296. },
  297. getMeeting: function(id, callback){
  298. //this.action = new MWF.xDesktop.Actions.RestActions("/Actions/action.json", "x_meeting_assemble_control", "x_component_Meeting");
  299. //var action = new MWF.xDesktop.Actions.RestActions("/Actions/action.json", "x_meeting_assemble_control", "x_component_Meeting");
  300. MWF.Actions.get("x_meeting_assemble_control").getMeeting(id, function(json){
  301. var data = json.data;
  302. MWF.Actions.get("x_meeting_assemble_control").getRoom(data.room, function(roomJson){
  303. data.roomName = roomJson.data.name;
  304. MWF.Actions.get("x_meeting_assemble_control").getBuilding(roomJson.data.building, function(buildingJson){
  305. data.buildingName = buildingJson.data.name;
  306. if (callback) callback(data);
  307. }.bind(this));
  308. }.bind(this));
  309. }.bind(this));
  310. },
  311. receiveMeetingInviteMessage: function(data){
  312. this.getMeeting(data.meeting, function(meeting){
  313. var content = MWF.LP.desktop.messsage.meetingInvite;
  314. content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
  315. var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
  316. content = content.replace(/{date}/g, date);
  317. content = content.replace(/{subject}/g, meeting.subject);
  318. content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
  319. var msg = {
  320. "subject": MWF.LP.desktop.messsage.meetingInviteMessage,
  321. "content": content
  322. };
  323. var messageItem = layout.desktop.message.addMessage(msg);
  324. var tooltipItem = layout.desktop.message.addTooltip(msg);
  325. tooltipItem.contentNode.addEvent("click", function(e){
  326. layout.desktop.message.hide();
  327. layout.desktop.openApplication(e, "Meeting", null);
  328. });
  329. messageItem.contentNode.addEvent("click", function(e){
  330. layout.desktop.message.addUnread(-1);
  331. layout.desktop.message.hide();
  332. layout.desktop.openApplication(e, "Meeting", null);
  333. });
  334. }.bind(this));
  335. },
  336. receiveMeetingCancelMessage: function(data){
  337. this.getMeeting(data.meeting, function(meeting){
  338. var content = MWF.LP.desktop.messsage.meetingCancel;
  339. content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
  340. var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
  341. content = content.replace(/{date}/g, date);
  342. content = content.replace(/{subject}/g, meeting.subject);
  343. content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
  344. var msg = {
  345. "subject": MWF.LP.desktop.messsage.meetingCancelMessage,
  346. "content": content
  347. };
  348. var messageItem = layout.desktop.message.addMessage(msg);
  349. var tooltipItem = layout.desktop.message.addTooltip(msg);
  350. tooltipItem.contentNode.addEvent("click", function(e){
  351. layout.desktop.message.hide();
  352. layout.desktop.openApplication(e, "Meeting", null);
  353. });
  354. messageItem.contentNode.addEvent("click", function(e){
  355. layout.desktop.message.addUnread(-1);
  356. layout.desktop.message.hide();
  357. layout.desktop.openApplication(e, "Meeting", null);
  358. });
  359. }.bind(this));
  360. },
  361. receiveMeetingAcceptMessage: function(data){
  362. this.getMeeting(data.meeting, function(meeting){
  363. var content = MWF.LP.desktop.messsage.meetingAccept;
  364. //content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
  365. content = content.replace(/{person}/g, MWF.name.cn(data.person));
  366. var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
  367. content = content.replace(/{date}/g, date);
  368. content = content.replace(/{subject}/g, meeting.subject);
  369. content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
  370. var msg = {
  371. "subject": MWF.LP.desktop.messsage.meetingAcceptMessage,
  372. "content": content
  373. };
  374. var messageItem = layout.desktop.message.addMessage(msg);
  375. var tooltipItem = layout.desktop.message.addTooltip(msg);
  376. tooltipItem.contentNode.addEvent("click", function(e){
  377. layout.desktop.message.hide();
  378. layout.desktop.openApplication(e, "Meeting", null);
  379. });
  380. messageItem.contentNode.addEvent("click", function(e){
  381. layout.desktop.message.addUnread(-1);
  382. layout.desktop.message.hide();
  383. layout.desktop.openApplication(e, "Meeting", null);
  384. });
  385. }.bind(this));
  386. },
  387. receiveMeetingRejectMessage: function(data){
  388. this.getMeeting(data.meeting, function(meeting){
  389. var content = MWF.LP.desktop.messsage.meetingReject;
  390. //content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
  391. content = content.replace(/{person}/g, MWF.name.cn(data.person));
  392. var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
  393. content = content.replace(/{date}/g, date);
  394. content = content.replace(/{subject}/g, meeting.subject);
  395. content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
  396. var msg = {
  397. "subject": MWF.LP.desktop.messsage.meetingRejectMessage,
  398. "content": content
  399. };
  400. var messageItem = layout.desktop.message.addMessage(msg);
  401. var tooltipItem = layout.desktop.message.addTooltip(msg);
  402. tooltipItem.contentNode.addEvent("click", function(e){
  403. layout.desktop.message.hide();
  404. layout.desktop.openApplication(e, "Meeting", null);
  405. });
  406. messageItem.contentNode.addEvent("click", function(e){
  407. layout.desktop.message.addUnread(-1);
  408. layout.desktop.message.hide();
  409. layout.desktop.openApplication(e, "Meeting", null);
  410. });
  411. }.bind(this));
  412. },
  413. receiveAttendanceAppealInviteMessage : function(data){
  414. var content = MWF.LP.desktop.messsage.attendanceAppealInvite;
  415. content = content.replace(/{subject}/g, data.subject);
  416. var msg = {
  417. "subject": MWF.LP.desktop.messsage.attendanceAppealInviteMessage,
  418. "content": content
  419. };
  420. var messageItem = layout.desktop.message.addMessage(msg);
  421. var tooltipItem = layout.desktop.message.addTooltip(msg);
  422. tooltipItem.contentNode.addEvent("click", function(e){
  423. layout.desktop.message.hide();
  424. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"13"});
  425. });
  426. messageItem.contentNode.addEvent("click", function(e){
  427. layout.desktop.message.addUnread(-1);
  428. layout.desktop.message.hide();
  429. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"13"});
  430. });
  431. },
  432. receiveAttendanceAppealAcceptMessage : function(data){
  433. var content = MWF.LP.desktop.messsage.attendanceAppealAccept;
  434. content = content.replace(/{subject}/g, data.subject);
  435. var msg = {
  436. "subject": MWF.LP.desktop.messsage.attendanceAppealAcceptMessage,
  437. "content": content
  438. };
  439. var messageItem = layout.desktop.message.addMessage(msg);
  440. var tooltipItem = layout.desktop.message.addTooltip(msg);
  441. tooltipItem.contentNode.addEvent("click", function(e){
  442. layout.desktop.message.hide();
  443. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
  444. });
  445. messageItem.contentNode.addEvent("click", function(e){
  446. layout.desktop.message.addUnread(-1);
  447. layout.desktop.message.hide();
  448. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
  449. });
  450. },
  451. receiveAttendanceAppealRejectMessage : function(data){
  452. var content = MWF.LP.desktop.messsage.attendanceAppealReject;
  453. content = content.replace(/{subject}/g, data.subject);
  454. var msg = {
  455. "subject": MWF.LP.desktop.messsage.attendanceAppealRejectMessage,
  456. "content": content
  457. };
  458. var messageItem = layout.desktop.message.addMessage(msg);
  459. var tooltipItem = layout.desktop.message.addTooltip(msg);
  460. tooltipItem.contentNode.addEvent("click", function(e){
  461. layout.desktop.message.hide();
  462. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
  463. });
  464. messageItem.contentNode.addEvent("click", function(e){
  465. layout.desktop.message.addUnread(-1);
  466. layout.desktop.message.hide();
  467. layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
  468. });
  469. }
  470. });