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());
}
}
}
}