I'm trying to handle disconnect / connect states using Presence in the Channel API.
Here are some of my code.
app.yaml
handlers: - url: /(.*\.(gif|png|jpg|ico|js|css))   static_files: \1   upload: (.*\.(gif|png|jpg|ico|js|css))  - url: .*   script: main.py  inbound_services: - channel_presence   main.py
class onConnect(webapp.RequestHandler):   def post(self):     for user in users:       users = User.all().fetch(1000)       client = client_id = self.request.get('from')       channel.send_message(user.channel,' connected');  class onDisconnect(webapp.RequestHandler):   def post(self):     Mainpage()     for user in users:       users = User.all().fetch(1000)       client = client_id = self.request.get('from')       channel.send_message(user.channel, ' disconnected');  application = webapp.WSGIApplication(                                      [('/', MainPage),                                      ('/_ah/channel/connected/',onConnect),                                      ('/_ah/channel/disconnected/',onDisconnect),                                      ('/chat',handleChat)],                                      debug=True)   Javascript
<script>         openChannel = function(){             var token = '{{ token }}';             var channel = new goog.appengine.Channel(token);             var handler = {                   'onopen': onOpened,                   'onmessage': onMessage,                   'onerror': function() {},                   'onclose': function() {}                 };             var socket = channel.open(handler);             socket.onopen = onOpened;             socket.onmessage = onMessage;              var chat = document.getElementById('chatinput');                 chat.onkeyup = function(e){                     if(e.keyCode == 13){                         sendChat(this.value);                         this.value = '';                     }                 }         }          sendMessage = function(path, opt_param) {             if (opt_param) {                 path += '?' + opt_param;             }             var xhr = new XMLHttpRequest();             xhr.open('POST', path, true);             xhr.send();         };          onOpened = function(){             console.log('Channel Opened');               var chatlog = document.getElementById('chatlog');             var msg = document.createElement('div');                 msg.innerHTML = 'Channel Opened';                 chatlog.appendChild(msg);             sendMessage('/chat','m='+'A User Joined.');         }          onMessage = function(m){             console.log('Message Recieved');             var chatlog = document.getElementById('chatlog');             var msg = document.createElement('div');             var d = new Date();                 msg.innerHTML = d.toLocaleTimeString() + ': ' + m.data;                 chatlog.appendChild(msg);         }          sendChat = function(msg){             console.log(msg);             sendMessage('/chat','m='+msg);         }          openChannel();     </script>   Using this code, connnect and disconnect is not triggering when a user closes their browser or whatever.
Are there anything wrong with this code?
Yes, route list is wrong. Put ('/', MainPage) in the end of the routes list. From webapp2 URI routing guide:
When the application receives a request, it tries to match each one in order until one matches, and then call the corresponding handler.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With