WebSocketClient发送数据,和webSocketClient接收消息

webSocketClient发送消息

  @Override
    public void sendStardMessage(int function, int type, String message) {
        Log.i("function:type:message:", String.valueOf(function)+","+String.valueOf(type)+","+message);
        AssistanceMessage assistanceMessage = new AssistanceMessage(function, type, message);
        mWebSocketClient.send(assistanceMessage.toString());
    }

    private WebSocketClient mWebSocketClient;

webSocketClient接收消息:
目前理解的是,如果websocket链接成果,则通过onMessage()自动接收websocket的消息

private void connectWebSocket() throws URISyntaxException,Exception{
    URI uri;
        uri = new URI(WS_BASE_URL + "?accessToken=" + UserInfo.getAccessToken());

    mWebSocketClient = new WebSocketClient(uri, new Draft_17()) {
        @Override
        public void onOpen(ServerHandshake serverHandshake) {
            Log.i("Websocket onopen", serverHandshake.getHttpStatusMessage());
            //mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL);
            InternetService.WebsocketConnect=true;
        }

        @Override
        public void onMessage(String s) {
            handleMessage(s,new NetMsgHandlePresenter());
        }

        @Override
        public void onClose(int code, String reason, boolean remote) {
            Log.i("websocket onclose", reason);
            socket关闭加入必须处理状态处理??????
            InternetService.WebsocketConnect=false;
            InternetService.bindUserSucc=false;
  //          InternetService.showInfoMsg("注意网络断开,请重新登录");
          //  Log.i("WebSocket","onclose");
            InternetService.loginSucc=false;//先认为WEBSOCKET断开后就认为不在线。20170630
        }

        @Override
        public void onError(Exception ex) {
            Log.i("websocket onerror", ex.getMessage());
            InternetService.WebsocketConnect=false;

        }
    };

    try {
        mWebSocketClient.connect();
        Log.i("WebSocket connect()","success");
        InternetService.WebsocketConnect=true;
    } catch (Exception e) {
        Log.i("websocketConnectExp", e.getMessage());
        InternetService.WebsocketConnect=false;
    }

}

handleMessage处理websocket的消息

//从websocket传来的消息
    private void handleMessage(String message,NetServiceInterface netServiceInterface) {

        AssistanceMessage assistanceMessage = null;

        assistanceMessage = JSON.parseObject(message, AssistanceMessage.class);

        // handle message
        if (assistanceMessage == null) {
            return ;
        }

        int type = assistanceMessage.getType();
        // 消息
       if (type == FastMessageBodyType.TEXT_TYPE) {
          //  massistanceView.appendDialog("From:" + assistanceMessage.getBody());
           //收到消息怎么处理
          // return assistanceMessage.getBody();
           Log.i("From:" , assistanceMessage.getBody());
           netServiceInterface.handleMsg(assistanceMessage.getFunction(),assistanceMessage.getBody());
           InternetService.handleMsg(assistanceMessage.getFunction(),assistanceMessage.getBody());

           //getFunction()获取是主端还是从端,replay或者直接发起
        }

        // 文件
        else {
           buffer.append(new String(Base64.decode(assistanceMessage.getBody(),Base64.DEFAULT)));
            if ( assistanceMessage.getLastPackage()) {
                try {
                File sdCardDir = Environment.getExternalStorageDirectory();

                String DATABASE_PATH=sdCardDir.getCanonicalPath()+"/Amonitordata/";
                    revFilePath=DATABASE_PATH+assistanceMessage.getFileName();
                    filename=assistanceMessage.getFileName();
                    File outputFile = new File(revFilePath);

                    //如果此文件存在,删除此文件
                    if(outputFile.exists())
                    {
                        //outputFile.delete();
                        revFilePath=DATABASE_PATH+"remote"+assistanceMessage.getFileName();
                        outputFile = new File(revFilePath);
                    }
                        OutputStream outputStream = new FileOutputStream(outputFile);

                        outputStream.write(buffer.toString().getBytes());
                        outputStream.flush();

                        Log.i("Websocket写入到文件succ:" , assistanceMessage.getFileName());

                        outputStream.close();

                        buffer = new StringBuilder();
                        InternetService.revFile=true;
                        InternetService.InterRevFile(assistanceMessage.getFunction());
                } catch (IOException e) {

                    InternetService.showInfoMsg("无法接收文件");
                    InternetService.mb_RemoteMode=false;
                    InternetService.mb_driveCilent=true;
                    InternetService.revFile=false;
                    Log.i("Websocket无法写入文件:" , e.getMessage());
                }
            }



        }

    }

WebSocketClient发送数据,和webSocketClient接收消息_第1张图片

你可能感兴趣的:(android,java基础)