MWF.xDesktop = MWF.xDesktop || {};
MWF.xApplication = MWF.xApplication || {};
MWF.require("MWF.xDesktop.Actions.RestActions", null, false);
MWF.xDesktop.WebSocket = new Class({
Implements: [Options, Events],
options: {},
initialize: function(options){
var addressObj = layout.desktop.serviceAddressList["x_collaboration_assemble_websocket"];
this.ws = "ws://"+addressObj.host+(addressObj.port==80 ? "" : ":"+addressObj.port)+addressObj.context+"/ws/collaboration";
//var ws = "ws://hbxa01.bf.ctc.com/x_collaboration_assemble_websocket/ws/collaboration";
this.ws = this.ws+"?x-token="+encodeURIComponent(Cookie.read("x-token"))+"&authorization="+encodeURIComponent(Cookie.read("x-token"));
this.webSocket = new WebSocket(this.ws);
this.webSocket.onopen = function (e){this.onOpen(e);}.bind(this);
this.webSocket.onclose = function (e){this.onClose(e);}.bind(this);
this.webSocket.onmessage = function (e){this.onMessage(e);}.bind(this);
this.webSocket.onerror = function (e){this.onError(e);}.bind(this);
},
onOpen: function(e){
//MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, "websocket is open ...");
},
onClose: function(e){
//MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, "websocket is closed ...");
},
onMessage: function(e){
if (e.data){
try{
var data = JSON.decode(e.data);
switch (data.category){
case "dialog":
switch (data.type){
case "text":
this.receiveChatMessage(data);
break;
default:
}
break;
default:
switch (data.type){
case "task":
this.receiveTaskMessage(data);
break;
case "read":
this.receiveReadMessage(data);
break;
case "review":
this.receiveReviewMessage(data);
break;
case "fileEditor":
this.receiveFileEditorMessage(data);
break;
case "fileShare":
this.receiveFileShareMessage(data);
break;
case "meetingInvite":
this.receiveMeetingInviteMessage(data);
break;
case "meetingCancel":
this.receiveMeetingCancelMessage(data);
break;
case "meetingAccept":
this.receiveMeetingAcceptMessage(data);
break;
case "meetingReject":
this.receiveMeetingRejectMessage(data);
break;
case "attendanceAppealInvite":
this.receiveAttendanceAppealInviteMessage(data);
break;
case "attendanceAppealAccept":
this.receiveAttendanceAppealAcceptMessage(data);
break;
case "attendanceAppealReject":
this.receiveAttendanceAppealRejectMessage(data);
break;
default:
}
}
}catch(e){}
}
},
onError: function(e){
},
close: function(){
this.webSocket.close();
},
send: function(msg){
if (!this.webSocket || this.webSocket.readyState != 1) {
this.initialize();
}
try{
this.webSocket.send(JSON.encode(msg));
}catch(e){
this.initialize();
this.webSocket.send(JSON.encode(msg));
}
},
receiveChatMessage: function(data){
if (layout.desktop.widgets["IMIMWidget"]) layout.desktop.widgets["IMIMWidget"].receiveChatMessage(data);
//if (layout.desktop.top.userPanel) layout.desktop.top.userPanel.receiveChatMessage(data);
},
receiveTaskMessage: function(data){
//data.task
var action = new MWF.xDesktop.Actions.RestActions("/res/mwf4/package/xDesktop/Actions/action.json", "x_processplatform_assemble_surface", "x_desktop");
action.invoke({
"name": "getTask",
"parameter": {"id": data.task},
"success": function(json){
var task = json.data;
var content = MWF.LP.desktop.messsage.receiveTask+"《"+task.title+"》, "+MWF.LP.desktop.messsage.activity+": "+(task.activityName || "")+"";
content += "
"+MWF.LP.desktop.messsage.appliction+": "+task.applicationName+"; "+
""+MWF.LP.desktop.messsage.process+": "+task.processName+"";
var msg = {
"subject": MWF.LP.desktop.messsage.taskMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "process.TaskCenter", null, {
"status": {
"navi": "task"
}
});
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "process.TaskCenter", null, {
"status": {
"navi": "task"
}
});
});
}.bind(this),
failure: function(){}
});
},
receiveReadMessage: function(data){
var action = new MWF.xDesktop.Actions.RestActions("/res/mwf4/package/xDesktop/Actions/action.json", "x_processplatform_assemble_surface", "x_desktop");
action.invoke({
"name": "getRead",
"parameter": {"id": data.read},
"success": function(json){
var read = json.data;
var content = MWF.LP.desktop.messsage.receiveRead+"《"+read.title+"》. ";
content += "
"+MWF.LP.desktop.messsage.appliction+": "+read.applicationName+"; "+
""+MWF.LP.desktop.messsage.process+": "+read.processName+"";
var msg = {
"subject": MWF.LP.desktop.messsage.readMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "process.TaskCenter", null, {
"status": {
"navi": "read"
}
});
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "process.TaskCenter", null, {
"status": {
"navi": "read"
}
});
});
}.bind(this),
failure: function(){}
});
},
receiveReviewMessage: function(data){
var content = MWF.LP.desktop.messsage.receiveReview+"《"+data.title+"》. ";
content += "
"+MWF.LP.desktop.messsage.appliction+": "+data.applicationName+"; "+
""+MWF.LP.desktop.messsage.process+": "+data.processName+"";
var msg = {
"subject": MWF.LP.desktop.messsage.reviewMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "process.TaskCenter", null, {
"status": {
"navi": "review"
}
});
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "process.TaskCenter", null, {
"status": {
"navi": "review"
}
});
});
},
receiveFileEditorMessage: function(data){
var content = ""+data.person+" "+MWF.LP.desktop.messsage.receiveFileEditor+"“"+data.name+"”. ";
var msg = {
"subject": MWF.LP.desktop.messsage.fileEditorMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "File", null, {
"status": {
"tab": "editor",
"node": data.person
}
});
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "File", null, {
"status": {
"tab": "editor",
"node": data.person
}
});
});
},
receiveFileShareMessage: function(data){
var content = ""+data.person+" "+MWF.LP.desktop.messsage.receiveFileShare+"“"+data.name+"”. ";
var msg = {
"subject": MWF.LP.desktop.messsage.fileShareMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "File", null, {
"status": {
"tab": "share",
"node": data.person
}
});
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "File", null, {
"status": {
"tab": "share",
"node": data.person
}
});
});
},
getMeeting: function(id, callback){
//this.action = new MWF.xDesktop.Actions.RestActions("/Actions/action.json", "x_meeting_assemble_control", "x_component_Meeting");
//var action = new MWF.xDesktop.Actions.RestActions("/Actions/action.json", "x_meeting_assemble_control", "x_component_Meeting");
MWF.Actions.get("x_meeting_assemble_control").getMeeting(id, function(json){
var data = json.data;
MWF.Actions.get("x_meeting_assemble_control").getRoom(data.room, function(roomJson){
data.roomName = roomJson.data.name;
MWF.Actions.get("x_meeting_assemble_control").getBuilding(roomJson.data.building, function(buildingJson){
data.buildingName = buildingJson.data.name;
if (callback) callback(data);
}.bind(this));
}.bind(this));
}.bind(this));
},
receiveMeetingInviteMessage: function(data){
this.getMeeting(data.meeting, function(meeting){
var content = MWF.LP.desktop.messsage.meetingInvite;
content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
content = content.replace(/{date}/g, date);
content = content.replace(/{subject}/g, meeting.subject);
content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
var msg = {
"subject": MWF.LP.desktop.messsage.meetingInviteMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Meeting", null);
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Meeting", null);
});
}.bind(this));
},
receiveMeetingCancelMessage: function(data){
this.getMeeting(data.meeting, function(meeting){
var content = MWF.LP.desktop.messsage.meetingCancel;
content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
content = content.replace(/{date}/g, date);
content = content.replace(/{subject}/g, meeting.subject);
content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
var msg = {
"subject": MWF.LP.desktop.messsage.meetingCancelMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Meeting", null);
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Meeting", null);
});
}.bind(this));
},
receiveMeetingAcceptMessage: function(data){
this.getMeeting(data.meeting, function(meeting){
var content = MWF.LP.desktop.messsage.meetingAccept;
//content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
content = content.replace(/{person}/g, MWF.name.cn(data.person));
var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
content = content.replace(/{date}/g, date);
content = content.replace(/{subject}/g, meeting.subject);
content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
var msg = {
"subject": MWF.LP.desktop.messsage.meetingAcceptMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Meeting", null);
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Meeting", null);
});
}.bind(this));
},
receiveMeetingRejectMessage: function(data){
this.getMeeting(data.meeting, function(meeting){
var content = MWF.LP.desktop.messsage.meetingReject;
//content = content.replace(/{person}/g, MWF.name.cn(meeting.applicant));
content = content.replace(/{person}/g, MWF.name.cn(data.person));
var date = Date.parse(meeting.startTime).format("%Y-%m-%d- %H:%M");
content = content.replace(/{date}/g, date);
content = content.replace(/{subject}/g, meeting.subject);
content = content.replace(/{addr}/g, meeting.roomName+"("+meeting.buildingName+")");
var msg = {
"subject": MWF.LP.desktop.messsage.meetingRejectMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Meeting", null);
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Meeting", null);
});
}.bind(this));
},
receiveAttendanceAppealInviteMessage : function(data){
var content = MWF.LP.desktop.messsage.attendanceAppealInvite;
content = content.replace(/{subject}/g, data.subject);
var msg = {
"subject": MWF.LP.desktop.messsage.attendanceAppealInviteMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Attendance", {"curNaviId":"13"});
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Attendance", {"curNaviId":"13"});
});
},
receiveAttendanceAppealAcceptMessage : function(data){
var content = MWF.LP.desktop.messsage.attendanceAppealAccept;
content = content.replace(/{subject}/g, data.subject);
var msg = {
"subject": MWF.LP.desktop.messsage.attendanceAppealAcceptMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
});
},
receiveAttendanceAppealRejectMessage : function(data){
var content = MWF.LP.desktop.messsage.attendanceAppealReject;
content = content.replace(/{subject}/g, data.subject);
var msg = {
"subject": MWF.LP.desktop.messsage.attendanceAppealRejectMessage,
"content": content
};
var messageItem = layout.desktop.message.addMessage(msg);
var tooltipItem = layout.desktop.message.addTooltip(msg);
tooltipItem.contentNode.addEvent("click", function(e){
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
});
messageItem.contentNode.addEvent("click", function(e){
layout.desktop.message.addUnread(-1);
layout.desktop.message.hide();
layout.desktop.openApplication(e, "Attendance", {"curNaviId":"12"});
});
}
});