2015-02-18 2 views
0

Я реализую Autobahn для подключения к серверу через WebSockets. Когда я нахожу соединение, он правильно открывает сокет и регистрирует, что этот сокет открыт. Затем я пытаюсь отправить запрос на сервер, который просто {"request":"getSoftwareVersion"}, когда сервер получает это, он должен отправить обратно версию программного обеспечения в объект JSON, проблема в том, что onMessage никогда не попадает. Вот мой код:Использование Autobahn для коммитов WebSocket, а не получение с сервера

public class AutoBahnConnectRequest extends Request{ 
    private static WebSocketConnection mAutoBahnConnection; 
    private String mSocketHostAddress; 
    private final static String m_TAG = AutoBahnConnectRequest.class.getSimpleName(); 

    public AutoBahnConnectRequest(String SocketHostAddress){ 
     this.mAutoBahnConnection = new WebSocketConnection(); 
     this.mSocketHostAddress = SocketHostAddress; 
    } 

    @Override 
    protected Void doInBackground(Void... params){ 
     try { 
      mAutoBahnConnection.connect(mSocketHostAddress, new WebSocketHandler(){ 

       @Override 
       public void onOpen() { 
        String requestSoftware = "{\"request\":\"getSoftwareVersion\"}"; 
        Log.i(m_TAG, requestSoftware); 
        Log.i(m_TAG, "Status: Connected to " + mSocketHostAddress); 
        mAutoBahnConnection.sendTextMessage(requestSoftware); 
       } 

       @Override 
       public void onTextMessage(String payload) { 
        Log.i(m_TAG, "Got echo: " + payload); 
       } 

       @Override 
       public void onClose(int code, String reason) { 
        Log.i(m_TAG, "Connection lost."+ reason); 
       } 
      }); 
     } catch (WebSocketException e) { 
      Log.d(m_TAG, e.toString()); 
     } 
     return null; 
    } 
} 

Это было реализовано с помощью HTML клиента, как это (не с автобана):

function getSoftwareVersion() { 
    socket_di.send('{"request":"getSoftwareVersion"}'); 
} 

и OnMessage принимает данные. Может кто-нибудь, пожалуйста, скажите мне, что я делаю что-то неправильно здесь?

спасибо.

ответ

0

Я выяснил свою проблему относительно этого. Для соединения WebSocket необходимо добавить протокол и параметры. Поэтому я изменил это:

mAutoBahnConnection.connect(mSocketHostAddress, new WebSocketHandler(){ 

       @Override 
       public void onOpen() { 
        String requestSoftware = "{\"request\":\"getSoftwareVersion\"}"; 
        Log.i(m_TAG, requestSoftware); 
        Log.i(m_TAG, "Status: Connected to " + mSocketHostAddress); 
        mAutoBahnConnection.sendTextMessage(requestSoftware); 
       } 

       @Override 
       public void onTextMessage(String payload) { 
        Log.i(m_TAG, "Got echo: " + payload); 
       } 

       @Override 
       public void onClose(int code, String reason) { 
        Log.i(m_TAG, "Connection lost."+ reason); 
       } 
      }); 
     } catch (WebSocketException e) { 
      Log.d(m_TAG, e.toString()); 
     } 

к этому:

mAutoBahnConnection.connect(mSocketHostAddress,new String[]{"this is my protocol"} ,new WebSocketHandler(){ 

       @Override 
       public void onOpen() { 
        String requestSoftware = "{\"request\":\"getSoftwareVersion\"}"; 
        Log.i(m_TAG, requestSoftware); 
        Log.i(m_TAG, "Status: Connected to " + mSocketHostAddress); 
        mAutoBahnConnection.sendTextMessage(requestSoftware); 
       } 

       @Override 
       public void onTextMessage(String payload) { 
        Log.i(m_TAG, "Got echo: " + payload); 
       } 

       @Override 
       public void onRawTextMessage(byte[] payload) { 
        try { 
         rawText = new String(payload, "UTF-8"); 
         Log.i(m_TAG, "ON RAW TEXT"); 
        } catch (UnsupportedEncodingException e) { 
         e.printStackTrace(); 
        } 
       } 

       @Override 
       public void onBinaryMessage(byte[] payload) { 
        Log.i(m_TAG, "ON BINARY MESSAGE"); 
       } 


       @Override 
       public void onClose(int code, String reason) { 
        Log.i(m_TAG, "Connection lost."+ reason); 
       } 
      }, options); 
     } catch (WebSocketException e) { 
      Log.d(m_TAG, e.toString()); 
     } 
Смежные вопросы