WebSocket.js 21 KB

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