WebSocket.js 21 KB

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