WebSocket.js 23 KB

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