2012-04-14 4 views
36

Я пытаюсь обрабатывать состояния разъединения/подключения, используя Presence в API канала.Channel API Presence не запускается

Вот некоторые из моих кодов.

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> 

Используя этот код, connnect и disconnect не тр iggering, когда пользователь закрывает свой браузер или что-то еще.

С этим кодом?

+1

Действительно ли вы создаете токен и инициализируете клиентскую сторону? Я не вижу код этой части в вашем вопросе. – alex

+0

т. Е. Покажите свой javascript. – dragonx

+0

добавлен javascript – AlexCheuk

ответ

1

Да, список маршрутов неверен. Поместите ('/', MainPage) в конец списка маршрутов. От webapp2 URI routing guide:

Когда приложение получает запрос, оно пытается сопоставить каждое из них, пока не будет найдено одно совпадение, а затем вызовет соответствующий обработчик.

 Смежные вопросы

  • Нет связанных вопросов^_^