define(function (require, exports, module) { var EventObject = require("../../platform/EventObject.js"); var ep = require("../../platform/extensionPort.js"); var port = ep.port; var mp = require("../widget_message_popup.js"); var sessMgr = require("../../account/sessionMgr.js"); var param = require("../../data.js"); var page = $("#chat_container"); var user = sessMgr.current; sessMgr.on("sessionChanged", function () { user = sessMgr.current; }); var RoomSession = function () { EventObject.apply(this); var that = this; var room; var chatListContainer = page.find("article.chat-items"); var chatListContainerDom = chatListContainer[0]; var roomStateTemplate = $("#chat_connect_server").doT(); var roomSystemNoticeTemplate = $("#chat_sys_alert").doT(); this.enterRoom = function (targetRoom) { if (targetRoom === room) return; room = targetRoom; //UI $("#chat_frame>section").removeClass("chat-page-current"); page.addClass("chat-page-current"); page.find(">header>span:eq(0)").html(room.name); chatListContainer.empty(); that.refreshOnlineCount(); page.find("button.button-primary").prop("disabled", true); port.postMessage("enterChatRoom", room); that.fireEvent("enterRoom"); }; this.refreshOnlineCount = function () { page.find(">header>span:eq(1)").html("当前在线 " + room.onlinecount + " 人"); }; this.exitRoom = function () { room = null; port.postMessage("disconnectChatRoom"); that.fireEvent("exitRoom"); }; this.appendMessageItem = function (html) { chatListContainer.append(html); chatListContainerDom.scrollTop = chatListContainerDom.clientHeight; }; this.clearDisplay = function () { chatListContainer.empty(); }; this.sendMsg = function (msg) { var data = { items: [msg], from: { realname: user.dispname, username: user.username }, target: [] } port.postMessage("chatRoomSendMsg", data); }; Object.defineProperty(this, "room", { get: function () { return room; } }); port.on("chatRoomConnecting", function () { that.appendMessageItem(roomStateTemplate({ state: "connecting", stateIcon: "fa-spin fa-spinner", msg: "正在连接服务器中..." })); that.fireEvent("chatRoomConnecting"); }); port.on("chatRoomConnected", function () { page.find("button.button-primary").prop("disabled", false); chatListContainer.find(".chat-state").remove(); that.appendMessageItem(roomSystemNoticeTemplate(room)); that.fireEvent("chatRoomConnected"); }); port.on("chatRoomReceiveMsg", function (e, data) { that.fireEvent("chatRoomReceiveMsg"); alert(JSON.stringify(data)) }); port.on("chatRoomDisconnected", function () { that.appendMessageItem(roomStateTemplate({ state: "disconnect", stateIcon: "fa-spin fa-spinner", msg: "服务器已断开连接。" })); that.fireEvent("chatRoomDisconnected"); page.find("button.button-primary").prop("disabled", true); }); return this; }; RoomSession.prototype = Object.create(EventObject); RoomSession.constructor = RoomSession; var session = new RoomSession(); (function chatEditor() { var editor = page.find("section.chat-editor"); var sendBtn = editor.find(">footer>button.button-primary"); var initEditor = function () { if (!sessMgr.current) return; var color = sessMgr.current.options.chatColor || "#000000"; editor.find(">header .chat-editor-color").val(color); editor.find(".chat-editor-container").css("color", color); }; var delayEnableSend = function () { sendBtn.prop("disabled", true); setTimeout(function () { sendBtn.prop("disabled", false); }, param.chatSendMsgDelay); }; initEditor(); editor.find(".chat-editor-container").keyup(function(e) { if (e.keyCode === 13 && e.ctrlKey) { sendBtn.click(); } }); sessMgr.on("sessionChanged", function () { initEditor(); }); editor.find(">header .chat-btn-cls").click(function () { session.clearDisplay(); }); editor.find(">header .chat-editor-color").change(function () { user.options.chatColor = this.value; editor.find(".chat-editor-container").css("color", this.value); sessMgr.save(); }); editor.find(">footer>button.button-default").click(function () { session.exitRoom(); }); editor.find(">footer>button.button-primary").click(function () { var msg = { color: user.options.chatColor, text: $.trim(editor.find(".chat-editor-container").text()) } if (!msg.text) return; editor.find(".chat-editor-container").empty(); session.sendMsg(msg); delayEnableSend(); }); })(); return { session: session, enterRoom: session.enterRoom } });