WebSocket.js 23 KB

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