diff options
Diffstat (limited to 'webchat/public')
| -rw-r--r-- | webchat/public/client.js | 42 | ||||
| -rw-r--r-- | webchat/public/commands.js | 5 | ||||
| -rw-r--r-- | webchat/public/functions.js | 13 | ||||
| -rw-r--r-- | webchat/public/handler.js | 10 | 
4 files changed, 53 insertions, 17 deletions
diff --git a/webchat/public/client.js b/webchat/public/client.js index 5e0202a1..8f7becb7 100644 --- a/webchat/public/client.js +++ b/webchat/public/client.js @@ -6,26 +6,54 @@ $(function updateTime () {    return true;  }); +var gensym = (function () { +  var i = 0 +  return function () { +    return ++i; +  } +})() + +settings.waiting_callbacks = {} + +function request (settings, method, params, callback) { +  var id = gensym() +  settings.waiting_callbacks[id] = callback +  settings.sock.send({method: method, params: params, id: id}); +} +  $(function connect() { -  sock = new SockJS('/echo'); +  settings.sock = new SockJS('/echo'); -  sock.onopen = function() { +  settings.sock.onopen = function() {      console.log('open'); -    sock.send('open'); +    request(settings, 'coi', {}, function (error, result) { +      if (error) { +        console.log('coi error', error) +      } else { +        settings.nick = result.nick //TODO: write to display +        settings.addr = result.addr //TODO: write to display +      } +    })    }; -  sock.onmessage = function(e) { +  settings.sock.onmessage = function(e) {      console.log('message', e.data);      try {        var object = JSON.parse(e.data);        console.log(object); -      clientParser(object);      } catch (error) {        console.log(error);        throw error;      } -  }; -  sock.onclose = function(event) { +    if (typeof object.method === 'string') { +      return methodDispatcher(settings, object); +    } else if (typeof object.result === 'string') { +      return resultDispatcher(settings, object); +    } else { +      console.log('bad message:', object) +    } +  } +  settings.sock.onclose = function(event) {      console.log('close');      switch (event.code) {        case 1006: //abnormal closure diff --git a/webchat/public/commands.js b/webchat/public/commands.js index 20197fbb..5a570556 100644 --- a/webchat/public/commands.js +++ b/webchat/public/commands.js @@ -5,16 +5,15 @@ commands.say = function (settings, params) {      method: 'say',      params: { msg: params },    }; -  sock.send(JSON.stringify(sendObj)) +  settings.sock.send(JSON.stringify(sendObj))  }  commands.nick = function (settings, params) { -  settings.nick = params    var sendObj = {      method: 'nick',      params: { nick: params },    } -  sock.send(JSON.stringify(sendObj)) +  settings.sock.send(JSON.stringify(sendObj))  }  commands.badcommand = function (settings, params) { diff --git a/webchat/public/functions.js b/webchat/public/functions.js index b669a928..45c8ad3f 100644 --- a/webchat/public/functions.js +++ b/webchat/public/functions.js @@ -8,9 +8,18 @@ function inputParser (str) {  } -function clientParser(object) { +function methodDispatcher (settings, object) {      console.log('parser: ',object) -    return (handler[object.method] || console.log)(object.params) +    return (handler[object.method] || console.log)(settings, object.params) +}; + +function resultDispatcher (settings, object) { +    console.log('parser: ',object) +    var callback = settings.waiting_callbacks[object.id] +    delete settings.waiting_callbacks[object.id] +    if (typeof callback === 'function') { +      callback(object.error, object.result) +    }  }; diff --git a/webchat/public/handler.js b/webchat/public/handler.js index 4c13ba80..0930646d 100644 --- a/webchat/public/handler.js +++ b/webchat/public/handler.js @@ -1,32 +1,32 @@  var handler = {} -handler.message = function(object) { +handler.message = function(settings, object) {    var safe_message = $('<div/>').text(object.msg).html();    safe_message = replaceURLWithHTMLLinks(safe_message);    var safe_from = $('<div/>').text(object.nick).html();    return chatboxAppend(safe_from, safe_message, 'msg')  }; -handler.join = function(object) { +handler.join = function(settings, object) {    var safe_from = $('<div/>').text(object.from).html();    $('#nicklist').append('<div class="name">' + safe_from + '</div>') ;    return chatboxAppend(safe_from, 'joined', 'join')  }; -handler.quit = function(object) { +handler.quit = function(settings, object) {    var safe_from = $('<div/>').text(object.from).html();    $(getNicklistElement(safe_from)).remove();    return chatboxAppend(safe_from, 'quit', 'quit')  }; -handler.nicklist = function(object) { +handler.nicklist = function(settings, object) {    Object.keys(object.nicklist).forEach(function (nick) {      var hash_from = btoa(nick).replace(/=/g,'_');      $('#nicklist').append('<div class="name">' + nick + '</div>') ;    });  }; -handler.nickchange = function(object) { +handler.nickchange = function(settings, object) {    var safe_from = $('<div/>').text(object.nick).html();    var safe_newnick = $('<div/>').text(object.newnick).html();    $(getNicklistElement(safe_from)).remove();  | 
