prog

dcc.js

Jan 20th, 2011
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var PASSWORD = '*********';
  2.  
  3. var server = context.CreateTcpServer();
  4. server.onaccept = 'client_accept';
  5. server.listen(59);
  6.  
  7. var dao = load('scripts/dao.js');
  8.  
  9. function client_accept()
  10. {
  11.   peer.onreadline = 'peer_readline';
  12.   peer.ondisconnect = 'peer_disconnect';
  13. }
  14.  
  15. function peer_disconnect()
  16. {
  17.   if (peer.hand.length > 0 && peer.hand.indexOf('?') < 0)
  18.   {
  19.     broadcast_message('* ' + peer.hand + ' has left the party line');
  20.   }
  21. }
  22.  
  23. function peer_readline()
  24. {
  25.   if (peer.hand.length == 0)
  26.   {
  27.     var args = text.split(' ');
  28.     if (args.length == 2 && args[0] == '100')
  29.     {
  30.       peer.hand = '?' + args[1];
  31.       peer.sendline('101 ' + my.nickname);
  32.       peer.sendline('Welcome ' + args[1] + ' to my DCC Server');
  33.       peer.sendline('-');
  34.       peer.sendline('Type your password');
  35.     }
  36.     else
  37.     {
  38.       peer.disconnect();
  39.     }
  40.     return;
  41.   }
  42.  
  43.   if (peer.hand.indexOf('?') == 0)
  44.   {
  45.     if (text == PASSWORD)
  46.     {
  47.       peer.hand = peer.hand.substring(1);
  48.       peer.sendline('Access granted. Enjoy!');
  49.       peer.sendline('-');
  50.       peer.sendline('Valid commands are:');
  51.       peer.sendline('  .add <nickname> <comment>');
  52.       peer.sendline('  .del <id1> [id2, id3..]');
  53.       peer.sendline('  .find <pattern>');
  54.       peer.sendline('  .who');
  55.       peer.sendline('-');
  56.       peer.sendline('Current users: ' + peer.hand + ' ' + who());
  57.       peer.sendline('-');
  58.       broadcast_message('* ' + peer.hand + ' has joined the party line');
  59.     }
  60.     else
  61.     {
  62.       peer.sendline('I cannot identify you');
  63.       peer.disconnect();
  64.     }
  65.     return;
  66.   }
  67.  
  68.   if (text.charAt(0) == '.')
  69.   {
  70.     process_command(text.substring(1));
  71.   }
  72.   else
  73.   {
  74.     broadcast_message('<' + peer.hand + '> ' + text);
  75.   }
  76. }
  77.  
  78. function auth_user(pass)
  79. {
  80.   return pass == 'test';
  81. }
  82.  
  83. function broadcast_message(message)
  84. {
  85.   for (var i = 0; i < server.peers.count; i++)
  86.   {
  87.     var p = server.peers(i);
  88.     if (p.hand.length > 0 && p.hand.indexOf('?') != 0 && p.id != peer.id)
  89.     {
  90.       p.sendline(message);
  91.     }
  92.   }
  93. }
  94.  
  95. function who()
  96. {
  97.   var result = '';
  98.   for (var i = 0; i < server.peers.count; i++)
  99.   {
  100.     var p = server.peers(i);
  101.     if (p.hand.length > 0 && p.hand.indexOf('?') != 0)
  102.     {
  103.       result += p.hand + ' ';
  104.     }
  105.   }
  106.   return result;
  107. }
  108.  
  109. function process_command(command)
  110. {
  111.   var args = command.split(' ');
  112.   command = args[0].toLowerCase();
  113.   args = args.slice(1);
  114.   switch (command)
  115.   {
  116.     case 'note':
  117.     case 'find':
  118.     case 'search':
  119.       find(args);
  120.       break;
  121.  
  122.     case 'add':
  123.     case 'append':
  124.     case 'ajout':
  125.       add(args);
  126.       break;
  127.      
  128.     case 'del':
  129.     case 'delete':
  130.     case 'rem':
  131.     case 'remove':
  132.       del(args);
  133.       break;
  134.      
  135.     case 'js':
  136.     case 'eval':
  137.       js(args);
  138.       break;
  139.      
  140.     case 'who':
  141.     case 'users':
  142.       peer.sendline('Current users: ' + who());
  143.       break;
  144.  
  145.     default:
  146.       peer.sendline('Supported commands: .add .del .find');
  147.       break;
  148.   }
  149. }
  150.  
  151. function js(args)
  152. {
  153.   var expr = args.join(' ');
  154.   try
  155.   {
  156.     var result = '' + eval(expr);
  157.     peer.sendline(result);
  158.   }
  159.   catch (e)
  160.   {
  161.     peer.sendline(e.description);
  162.   }
  163. }
  164.  
  165. function find(args)
  166. {
  167.   var target = args.join('*');
  168.   var notes = dao.select(target);
  169.   if (notes.length == 0)
  170.   {
  171.     peer.sendline('No match for ' + target);
  172.   }
  173.   else
  174.   {
  175.     peer.sendline('Listing...');
  176.     for (var i = 0; i < notes.length; i++)
  177.     {
  178.       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);
  179.     }
  180.     peer.sendline('End of listing for "' + target + '"');
  181.   }
  182. }
  183.  
  184. function del(args)
  185. {
  186.   peer.sendline('Deleting entries ' + args.join(', '));
  187.   try
  188.   {
  189.     for (var i = 0; i < args.length; i++)
  190.     {
  191.       dao.del(args[i]);
  192.     }
  193.     peer.sendline('Done');
  194.   }
  195.   catch (e)
  196.   {
  197.     peer.sendline(e.description);
  198.   }
  199. }
  200.  
  201. function add(args)
  202. {
  203.   try
  204.   {
  205.     dao.insert(peer.hand, args[0], 'plain', args.slice(1).join(' '));
  206.     peer.sendline('Done');
  207.     broadcast_message(peer.hand + ' added a comment on <' + args[0] + '> ' + args.slice(1).join(' '));
  208.   }
  209.   catch (e)
  210.   {
  211.     peer.sendline(e.description);
  212.   }
  213. }
  214.  
  215. String.repeat = function(chr,count)
  216. {
  217.     var str = "";
  218.     for(var x=0;x<count;x++) {str += chr};
  219.     return str;
  220. }
  221.  
  222. String.prototype.padL = function(width,pad)
  223. {
  224.     if (!width ||width<1)
  225.         return this;
  226.  
  227.     if (!pad) pad=" ";
  228.     var length = width - this.length
  229.     if (length < 1) return this.substr(0,width);
  230.  
  231.     return (String.repeat(pad,length) + this).substr(0,width);
  232. }
  233.  
  234. String.prototype.padR = function(width,pad)
  235. {
  236.     if (!width || width<1)
  237.         return this;
  238.  
  239.     if (!pad) pad=" ";
  240.     var length = width - this.length
  241.     if (length < 1) this.substr(0,width);
  242.  
  243.     return (this + String.repeat(pad,length)).substr(0,width);
  244. }
  245.  
  246. Date.prototype.format = function (fmt)
  247. {
  248.     var date = this;
  249.  
  250.     if (!fmt)
  251.       fmt="MM/dd/yyyy";
  252.  
  253.     var month = date.getMonth() + 1;
  254.     var year = date.getFullYear();
  255.  
  256.     fmt = fmt.replace("MM",month.toString().padL(2,"0"));
  257.  
  258.     if (fmt.indexOf("yyyy") > -1)
  259.         fmt = fmt.replace("yyyy",year.toString());
  260.     else if (fmt.indexOf("yy") > -1)
  261.         fmt = fmt.replace("yy",year.toString().substr(2,2));
  262.  
  263.     fmt = fmt.replace("dd",date.getDate().toString().padL(2,"0"));
  264.  
  265.     var hours = date.getHours();
  266.     if (fmt.indexOf("t") > -1)
  267.     {
  268.        if (hours > 11)
  269.         fmt = fmt.replace("t","pm")
  270.        else
  271.         fmt = fmt.replace("t","am")
  272.     }
  273.     if (fmt.indexOf("HH") > -1)
  274.         fmt = fmt.replace("HH",hours.toString().padL(2,"0"));
  275.     if (fmt.indexOf("hh") > -1) {
  276.         if (hours > 12) hours - 12;
  277.         if (hours == 0) hours = 12;
  278.         fmt = fmt.replace("hh",hours.toString().padL(2,"0"));
  279.     }
  280.     if (fmt.indexOf("mm") > -1)
  281.        fmt = fmt.replace("mm",date.getMinutes().toString().padL(2,"0"));
  282.     if (fmt.indexOf("ss") > -1)
  283.        fmt = fmt.replace("ss",date.getSeconds().toString().padL(2,"0"));
  284.     return fmt;
  285. }
Add Comment
Please, Sign In to add comment