var pomelo = window.pomelo; var username; var users; var rid; var base = 1000; var increase = 25; var reg = /^[a-zA-Z0-9_\u4e00-\u9fa5]+$/; var LOGIN_ERROR = "There is no server to log in, please wait."; var LENGTH_ERROR = "Name/Channel is too long or too short. 20 character max."; var NAME_ERROR = "Bad character in Name/Channel. Can only have letters, numbers, Chinese characters, and '_'"; var DUPLICATE_ERROR = "Please change your name to login."; util = { urlRE: /https?:\/\/([-\w\.]+)+(:\d+)?(\/([^\s]*(\?\S+)?)?)?/g, // html sanitizer toStaticHTML: function(inputHtml) { inputHtml = inputHtml.toString(); return inputHtml.replace(/&/g, "&").replace(//g, ">"); }, //pads n with zeros on the left, //digits is minimum length of output //zeroPad(3, 5); returns "005" //zeroPad(2, 500); returns "500" zeroPad: function(digits, n) { n = n.toString(); while(n.length < digits) n = '0' + n; return n; }, //it is almost 8 o'clock PM here //timeString(new Date); returns "19:49" timeString: function(date) { var minutes = date.getMinutes().toString(); var hours = date.getHours().toString(); return this.zeroPad(2, hours) + ":" + this.zeroPad(2, minutes); }, //does the argument only contain whitespace? isBlank: function(text) { var blank = /^\s*$/; return(text.match(blank) !== null); } }; //always view the most recent message when it is added function scrollDown(base) { window.scrollTo(0, base); $("#entry").focus(); }; // add message on board function addMessage(from, target, text, time) { var name = (target == '*' ? 'all' : target); if(text === null) return; if(time == null) { // if the time is null or undefined, use the current time. time = new Date(); } else if((time instanceof Date) === false) { // if it's a timestamp, interpret it time = new Date(time); } //every message you see is actually a table with 3 cols: // the time, // the person who caused the event, // and the content var messageElement = $(document.createElement("table")); messageElement.addClass("message"); // sanitize text = util.toStaticHTML(text); var content = '
${text}`);
}
$(document).ready(function() {
//when first time into chat room.
//wait message from the server.
pomelo.on('onChat', function(data) {
addMessage(data.from, data.target, data.msg);
$("#chatHistory").show();
if(data.from !== username)
tip('message', data.from);
});
//update user list
pomelo.on('onAdd', function(data) {
var user = data.user;
tip('online', user);
addUser(user);
});
//update user list
pomelo.on('onLeave', function(data) {
var user = data.user;
tip('offline', user);
removeUser(user);
});
//handle disconect message, occours when the client is disconnect with servers
pomelo.on('disconnect', function(reason) {
$("#add").show();
$('#remove').hide();
});
function getFormParam() {
var d = {};
var t = $('form').serializeArray();
//t的值为[{name: "a1", value: "xx"},
//{name: "a2", value: "xx"}...]
$.each(t, function() {
console.log(this.name, this.value, this.name == 'params' && this.value)
if(this.name == 'params' && this.value) {
try {
var json = JSON.parse(this.value);
for(var key in json) {
console.log(key, json[key])
d[key] = json[key];
}
} catch(e) {
alert('参数json格式错误');
return;
}
} else {
if(this.name == serverId) this.value = parseInt(this.value);
d[this.name] = this.value;
}
});
console.log(d)
return d;
}
//deal with login button click.
$("#add").click(function() {
var d = getFormParam();
//query entry of connection
queryEntry(d, function(host, port) {
pomelo.init({
host: host,
port: port,
log: true
}, function() {
var route = "connector.entryHandler.enter";
pomelo.request(route, d, function(data) {
console.log(data)
if(data.code != 0) {
if(data.msg) {
showError(data.msg);
} else {
showError(DUPLICATE_ERROR);
}
return;
}
$("#add").hide();
$('#remove').show();
addToContent(JSON.stringify(data, null,4));
// setName();
// setRoom();
// showChat();
// initUserList(data);
});
});
});
});
$("#send").click(function() {
var d = getFormParam();
//query entry of connection
var route = d.route;
pomelo.request(route, d, function(data) {
console.log(data)
if(data.error) {
if(data.data) {
showError(data.data);
} else {
showError(DUPLICATE_ERROR);
}
return;
}
$("#add").hide();
$('#remove').show();
addToContent(JSON.stringify(data, null, 4));
// setName();
// setRoom();
// showChat();
// initUserList(data);
});
});
$('#confirm').click(function() {
var value = $('#tuisong').val();
//update user list
pomelo.on(value, function(data) {
$('#time').html(Date.now() + '');
$('#content2').html(`${JSON.stringify(data, null, 4)}`);
});
alert('OK')
})
$("#remove").click(function() {
pomelo.disconnect();
$("#add").show();
$('#remove').hide();
});
$("#errbtntest").click(()=>{
var route = "chat.chatHandler.send";
pomelo.request(route,{
content:$("#entry").attr("value").replace("\n", ""),
rid:rid,
// lost field
},data=>{
console.warn("!!?? ",data)
})
})
//deal with chat mode.
$("#entry").keypress(function(e) {
var route = "chat.chatHandler.send";
var target = $("#usersList").val();
if(e.keyCode != 13 /* Return */ ) return;
var msg = $("#entry").attr("value").replace("\n", "");
if(!util.isBlank(msg)) {
pomelo.request(route, {
rid: rid,
content: msg,
from: username,
target: target
}, function(data) {
$("#entry").attr("value", ""); // clear the entry field.
if(target != '*' && target != username) {
addMessage(username, target, msg);
$("#chatHistory").show();
}
});
}
});
});