2013-09-23 4 views
0

Я пытаюсь включить веб-узлы в приложение Play. Мой файл маршрут, как показано ниже:Websockets with Play Framework 2.x - Java - 500 Ошибка

GET  /login        controllers.Application.login() 
POST /login        controllers.Application.authenticate() 
GET  /logout        controllers.Application.logout() 

GET  /loggedin    controllers.Presencelanding.loggedInSocket() 

GET  /loggedin       controllers.Presencelanding.loggedIn() 

Я хочу создать WebSocket, как только пользователь перенаправляется на это/LoggedIn страница

Теперь в моем контроллер presenceLanding меня

public static Result loggedIn(){ 
    ..... blah ....blah} 


public static WebSocket loggedInSocket() { 
try { 
     final Http.Session session = session(); 
     String username = session(AppConstants.USERNAME); 
     connection = getConnection(username); 
     connection = XMPPConnectionHandler.performLogin( 
        xmppLogin.getLoggedinuser().getUsername(), 
        xmppLogin.getLoggedinuser().getPassword(),connection); 
     getAllData(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     Logger.error(e.getLocalizedMessage()); 
    } 
    return new WebSocket() { 
     public void onReady(WebSocket.In in, WebSocket.Out out) { 
      System.out.println("ready"); 
      in.onMessage(new F.Callback() { 
       public void invoke(String event) { 
        System.out.println(event); 
       } 

       @Override 
       public void invoke(Object a) throws Throwable { 
        System.out.println(a); 

       } 
      }); 

      in.onClose(new F.Callback0() { 
       public void invoke() { 
        System.out.println("Disconnected"); 
       } 
      }); 

          out.write(loggedin.render(xmppLogin,completedChallenges, 
          pendingSentFromMeChal,pendingForMeChal,unseen)); 
     } 
    }; 
} 

Из моего javascript на клиенте у меня есть:

$(document).ready(function() { 
    getWebSocket(); 
}); 

function getWebSocket() { 
     var ws = new WebSocket("ws://localhost:9000/loggedInSocket"); 
} 

Howeve r, когда я добавляю функцию возврата websocket в файл маршрутов, я получаю следующую ошибку: Невозможно использовать метод, возвращающий play.mvc.WebSocket [? 0] в качестве обработчика

Если я удалю эту строку и повторю попытку, ошибка консоли Javascript при попытке установки на WebSocket: подключение WebSocket к 'WS: // локальный: 9000/loggedInSocket' не удалось: Неожиданный код ответа: 500

QS2: также Как я обновить HTML, используя тот же WebSocket?

QS 3: Есть много сообщений об использовании Iteratees и т. Д. Для веб-сайтов с scala. Есть ли параллель для java, а также.

Цените любую помощь. Спасибо!

+0

... и ошибка есть? –

+0

Привет, Майк, я обновил вопрос – Mrinal

+1

в QS2 - ваше сообщение в сети может содержать только «сигнал» для JS, который после приема будет выполнять обычный вызов AJAX в фоновом режиме, получать обновленные данные и обновлять представление – biesior

ответ

1

Меняйте маршруты в:

GET  /login        controllers.Application.login() 
POST /login        controllers.Application.authenticate() 
GET  /logout        controllers.Application.logout() 

GET  /loggedInSocket      controllers.Presencelanding.loggedInSocket() 

GET  /loggedin       controllers.Presencelanding.loggedIn() 
0

Спасибо за ответы. Я мог бы решить эту проблему, добавив следующую строку в файл маршрутов:

GET  /loggedin/loggedInSocket     controllers.Presencelanding.loggedInSocket()