Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var PASSWORD = '*********';
- var server = context.CreateTcpServer();
- server.onaccept = 'client_accept';
- server.listen(59);
- var dao = load('scripts/dao.js');
- function client_accept()
- {
- peer.onreadline = 'peer_readline';
- peer.ondisconnect = 'peer_disconnect';
- }
- function peer_disconnect()
- {
- if (peer.hand.length > 0 && peer.hand.indexOf('?') < 0)
- {
- broadcast_message('* ' + peer.hand + ' has left the party line');
- }
- }
- function peer_readline()
- {
- if (peer.hand.length == 0)
- {
- var args = text.split(' ');
- if (args.length == 2 && args[0] == '100')
- {
- peer.hand = '?' + args[1];
- peer.sendline('101 ' + my.nickname);
- peer.sendline('Welcome ' + args[1] + ' to my DCC Server');
- peer.sendline('-');
- peer.sendline('Type your password');
- }
- else
- {
- peer.disconnect();
- }
- return;
- }
- if (peer.hand.indexOf('?') == 0)
- {
- if (text == PASSWORD)
- {
- peer.hand = peer.hand.substring(1);
- peer.sendline('Access granted. Enjoy!');
- peer.sendline('-');
- peer.sendline('Valid commands are:');
- peer.sendline(' .add <nickname> <comment>');
- peer.sendline(' .del <id1> [id2, id3..]');
- peer.sendline(' .find <pattern>');
- peer.sendline(' .who');
- peer.sendline('-');
- peer.sendline('Current users: ' + peer.hand + ' ' + who());
- peer.sendline('-');
- broadcast_message('* ' + peer.hand + ' has joined the party line');
- }
- else
- {
- peer.sendline('I cannot identify you');
- peer.disconnect();
- }
- return;
- }
- if (text.charAt(0) == '.')
- {
- process_command(text.substring(1));
- }
- else
- {
- broadcast_message('<' + peer.hand + '> ' + text);
- }
- }
- function auth_user(pass)
- {
- return pass == 'test';
- }
- function broadcast_message(message)
- {
- for (var i = 0; i < server.peers.count; i++)
- {
- var p = server.peers(i);
- if (p.hand.length > 0 && p.hand.indexOf('?') != 0 && p.id != peer.id)
- {
- p.sendline(message);
- }
- }
- }
- function who()
- {
- var result = '';
- for (var i = 0; i < server.peers.count; i++)
- {
- var p = server.peers(i);
- if (p.hand.length > 0 && p.hand.indexOf('?') != 0)
- {
- result += p.hand + ' ';
- }
- }
- return result;
- }
- function process_command(command)
- {
- var args = command.split(' ');
- command = args[0].toLowerCase();
- args = args.slice(1);
- switch (command)
- {
- case 'note':
- case 'find':
- case 'search':
- find(args);
- break;
- case 'add':
- case 'append':
- case 'ajout':
- add(args);
- break;
- case 'del':
- case 'delete':
- case 'rem':
- case 'remove':
- del(args);
- break;
- case 'js':
- case 'eval':
- js(args);
- break;
- case 'who':
- case 'users':
- peer.sendline('Current users: ' + who());
- break;
- default:
- peer.sendline('Supported commands: .add .del .find');
- break;
- }
- }
- function js(args)
- {
- var expr = args.join(' ');
- try
- {
- var result = '' + eval(expr);
- peer.sendline(result);
- }
- catch (e)
- {
- peer.sendline(e.description);
- }
- }
- function find(args)
- {
- var target = args.join('*');
- var notes = dao.select(target);
- if (notes.length == 0)
- {
- peer.sendline('No match for ' + target);
- }
- else
- {
- peer.sendline('Listing...');
- for (var i = 0; i < notes.length; i++)
- {
- peer.sendline('(' + notes[i].id + ') [' + new Date(notes[i].date).format('yyyy/MM/dd HH:mm:ss') + '] by <' + notes[i].author + '> on <' + notes[i].target + '> ' + notes[i].comment);
- }
- peer.sendline('End of listing for "' + target + '"');
- }
- }
- function del(args)
- {
- peer.sendline('Deleting entries ' + args.join(', '));
- try
- {
- for (var i = 0; i < args.length; i++)
- {
- dao.del(args[i]);
- }
- peer.sendline('Done');
- }
- catch (e)
- {
- peer.sendline(e.description);
- }
- }
- function add(args)
- {
- try
- {
- dao.insert(peer.hand, args[0], 'plain', args.slice(1).join(' '));
- peer.sendline('Done');
- broadcast_message(peer.hand + ' added a comment on <' + args[0] + '> ' + args.slice(1).join(' '));
- }
- catch (e)
- {
- peer.sendline(e.description);
- }
- }
- String.repeat = function(chr,count)
- {
- var str = "";
- for(var x=0;x<count;x++) {str += chr};
- return str;
- }
- String.prototype.padL = function(width,pad)
- {
- if (!width ||width<1)
- return this;
- if (!pad) pad=" ";
- var length = width - this.length
- if (length < 1) return this.substr(0,width);
- return (String.repeat(pad,length) + this).substr(0,width);
- }
- String.prototype.padR = function(width,pad)
- {
- if (!width || width<1)
- return this;
- if (!pad) pad=" ";
- var length = width - this.length
- if (length < 1) this.substr(0,width);
- return (this + String.repeat(pad,length)).substr(0,width);
- }
- Date.prototype.format = function (fmt)
- {
- var date = this;
- if (!fmt)
- fmt="MM/dd/yyyy";
- var month = date.getMonth() + 1;
- var year = date.getFullYear();
- fmt = fmt.replace("MM",month.toString().padL(2,"0"));
- if (fmt.indexOf("yyyy") > -1)
- fmt = fmt.replace("yyyy",year.toString());
- else if (fmt.indexOf("yy") > -1)
- fmt = fmt.replace("yy",year.toString().substr(2,2));
- fmt = fmt.replace("dd",date.getDate().toString().padL(2,"0"));
- var hours = date.getHours();
- if (fmt.indexOf("t") > -1)
- {
- if (hours > 11)
- fmt = fmt.replace("t","pm")
- else
- fmt = fmt.replace("t","am")
- }
- if (fmt.indexOf("HH") > -1)
- fmt = fmt.replace("HH",hours.toString().padL(2,"0"));
- if (fmt.indexOf("hh") > -1) {
- if (hours > 12) hours - 12;
- if (hours == 0) hours = 12;
- fmt = fmt.replace("hh",hours.toString().padL(2,"0"));
- }
- if (fmt.indexOf("mm") > -1)
- fmt = fmt.replace("mm",date.getMinutes().toString().padL(2,"0"));
- if (fmt.indexOf("ss") > -1)
- fmt = fmt.replace("ss",date.getSeconds().toString().padL(2,"0"));
- return fmt;
- }
Add Comment
Please, Sign In to add comment