Skip to content
Snippets Groups Projects
Commit 74996ee4 authored by mcmlxxix's avatar mcmlxxix
Browse files

fix subscription cancelling on client disconnect, make service log output a little more sexy

parent a903fac7
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,7 @@ Bot_Commands["DEF"].command = function (target,onick,ouh,srv,lvl,cmd) {
srv.o(target,"You didn't specify a word");
return;
}
var xmldef=define(cmd.shift(),"wn");
var xmldef=define(cmd[0],"wn");
if(!xmldef) {
srv.o(target, "word not found: " + cmd[0]);
return;
......@@ -45,7 +45,7 @@ Bot_Commands["SYN"].command = function (target,onick,ouh,srv,lvl,cmd) {
srv.o(target,"You didn't specify a word");
return;
}
var xmldef=define(cmd.shift(),"wn");
var xmldef=define(cmd[0],"wn");
if(!xmldef) {
srv.o(target, "no synonyms found: " + cmd[0]);
return;
......@@ -74,7 +74,7 @@ Bot_Commands["INFO"].command = function (target,onick,ouh,srv,lvl,cmd) {
srv.o(target,"You didn't specify a word");
return;
}
var xmldef=define(cmd.shift(),"wn");
var xmldef=define(cmd[0],"wn");
if(!xmldef) {
srv.o(target, "no usage examples found: " + cmd[0]);
return;
......@@ -90,3 +90,26 @@ Bot_Commands["INFO"].command = function (target,onick,ouh,srv,lvl,cmd) {
srv.o(target,word + " (usage): " + examples);
return;
}
Bot_Commands["WTF"] = new Bot_Command(0,1,false);
Bot_Commands["WTF"].command = function (target,onick,ouh,srv,lvl,cmd) {
cmd.shift();
cmd.shift();
if(!cmd[0]) {
srv.o(target,"usage: " + get_cmd_prefix() + "wtf is <acronym>");
return;
}
var result=wtf_is(cmd[0]);
if(!result) {
srv.o(target, "acronym not found: " + cmd[0]);
return;
}
var str="";
for(var a in result) {
str+=", " + result[a].expan;
}
srv.o(target,cmd[0].toUpperCase() + ":" + str.substr(1));
return;
}
......@@ -6,6 +6,7 @@ function define(word,dict) {
var body = new HTTPRequest().Get(dict_url).replace(/<\?.*\?>[\r\n]*/,'').replace(/\sxmlns=".*"/,'');
var xml_obj = new XML(body);
var definition = xml_obj.Definitions.Definition;
log(definition);
if(!definition[0]) {
return false;
} else {
......@@ -17,6 +18,20 @@ function parseDefXML(xmldef) {
return(strip_ctrl(xmldef.WordDefinition).replace(/\s+/g,' ').replace(/[{}]/g,''));
}
function wtf_is(acronym) {
var dict_url = "http://acronyms.silmaril.ie/cgi-bin/uncgi/xaa?" + acronym;
var body = new HTTPRequest().Get(dict_url).replace(/<\?.*\?>[\r\n]*/,'').replace(/\sxmlns=".*"/,'');
var xml_obj = new XML(body);
var acronyms = xml_obj.found.acro;
log(acronyms);
if(!acronyms[0]) {
return false;
} else {
return(acronyms);
}
}
function sortIndices(list) {
for(n = 0;n < list.length;n++)
{
......
......@@ -111,13 +111,13 @@ service = new (function() {
}
/* log and disconnect banned hosts */
if(service.denyhosts[client.remote_ip_address]) {
log(LOG_INFO,"blocked: " + client.remote_ip_address);
log(LOG_WARNING,"<--" + client.descriptor + ": " + client.remote_ip_address + " blocked");
client.close();
return;
}
/* log and initialize normal connections */
log(LOG_INFO,"connected: " + client.remote_ip_address);
log(LOG_INFO,"<--" + client.descriptor + ": " + client.remote_ip_address + " connected");
client.nonblocking = true;
client.id = client.descriptor;
service.sockets.push(client);
......@@ -148,12 +148,14 @@ service = new (function() {
}
for(var s=1;s<this.sockets.length;s++) {
if(!this.sockets[s].is_connected) {
log(LOG_INFO,"disconnected: " + this.sockets[s].remote_ip_address);
log(LOG_INFO,"<--" + this.sockets[s].descriptor + ": "
+ this.sockets[s].remote_ip_address + " disconnected");
this.release(this.sockets[s]);
this.sockets.splice(s--,1);
}
if(this.denyhosts[this.sockets[s].remote_ip_address]) {
log(LOG_INFO,"disconnecting: " + this.sockets[s].remote_ip_address);
else if(this.denyhosts[this.sockets[s].remote_ip_address]) {
log(LOG_WARNING,"<--" + this.sockets[s].descriptor + ": "
+ this.sockets[s].remote_ip_address + " terminated");
this.release(this.sockets[s]);
this.sockets[s].close();
this.sockets.splice(s--,1);
......@@ -347,11 +349,12 @@ engine = new (function() {
/* module data */
function Module(dir,name) {
this.online = true;
this.dir = dir;
this.db = new JSONdb(dir+name+".json");
/* load module service files */
if(file_exists(dir + "service.js")) {
if(file_exists(this.dir + "service.js")) {
try {
load(this,dir + "service.js");
load(this,this.dir + "service.js");
}
catch(e) {
this.online = false;
......
......@@ -499,8 +499,9 @@ function JSONdb (fileName) {
/* release any locks or subscriptions held by a disconnected client */
this.release = function(client) {
if(this.subscriptions[client.id]) {
free_prisoner(client,this.shadow);
for (var s in this.subscriptions[client.id]) {
free_prisoners(client,this.shadow);
cancel_subscriptions(client,this.subscriptions[client.id]);
delete this.subscriptions[client.id];
}
for(var c=0;c<this.queue.length;c++) {
......@@ -714,24 +715,25 @@ function JSONdb (fileName) {
}
}
/* release subscriptions and locks on an object recursively */
function free_prisoner(client,shadow) {
if(shadow._lock) {
if(shadow._lock[client.id]) {
log(LOG_DEBUG,"releasing lock: " + client.id);
delete shadow._lock[client.id];
}
}
if(shadow._subscribers) {
if(shadow._subscribers[client.id]) {
log(LOG_DEBUG,"releasing subscriber: " + client.id);
delete shadow._subscribers[client.id];
send_subscriber_updates(client,record,"UNSUBSCRIBE");
}
/* release locks on an object recursively */
function free_prisoners(client,shadow) {
if(shadow._lock && shadow._lock[client.id]) {
log(LOG_DEBUG,"releasing lock: " + client.id);
delete shadow._lock[client.id];
}
for(var s in shadow) {
if(typeof shadow[s] == "object")
free_prisoner(client,shadow[s]);
free_prisoners(client,shadow[s]);
}
}
/* release subscriptions on an object recursively */
function cancel_subscriptions(client,records) {
for(var r in records) {
var record = records[r];
log(LOG_DEBUG,"releasing subscription: " + client.id);
delete record.shadow._subscribers[client.id];
send_subscriber_updates(client,record,"UNSUBSCRIBE");
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment