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

2023-05-16

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



        }

    }

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebSocketClient发送数据,和webSocketClient接收消息 的相关文章

随机推荐

  • 【力扣】654. 最大二叉树

    题目概述 原题链接 相关节点定义 xff1a span class token comment Definition for a binary tree node struct TreeNode int val TreeNode left
  • 【力扣】114. 二叉树展开为链表

    题目概述 原题链接 树定义如下 xff1a span class token comment Definition for a binary tree node struct TreeNode int val TreeNode left T
  • 【力扣】725. 分隔链表

    题目概述 原题链接 链表定义如下 xff1a span class token comment Definition for singly linked list struct ListNode int val ListNode next
  • Angular应用开发中遇到的问题

    记录在开发Angular应用时遇到的问题以及解决方案 问题 3 前提 xff1a 在Angular应用的组件中使用响应式表单进行数据校验 xff0c 使用FormBuilder服务的 group 方法来构建一组FormControl实例 需
  • 浏览器插件解决跨域问题

    浏览器插件解决跨域问题 在前端进行调试时 xff0c 经常会遇到CORS问题 xff0c 在调试时 xff0c 可暂时使用浏览器插件解决跨域问题 浏览器 xff1a Microsoft Edge 插件搜索截图如下 xff1a 插件开启后 x
  • 洛谷P1591 阶乘数码(C语言)简单易懂

    题目描述 求 n n 中某个数码出现的次数 输入格式 第一行为 t t leq 10 t t 10 xff0c 表示数据组数 接下来 t 行 xff0c 每行一个正整数 n n leq 1000 n n 1000 和数码 aa 输出格式 对
  • 将java项目发布到maven中央仓库(踩坑大全)

    前言 xff1a 第一次将构件发布到中央仓库 xff0c 真的不是一件轻松的事情 xff0c 网络上有很多其他文章大都不会把坑帮你描述清楚 所以觉得非常有必要把些步骤记下来 xff0c 让大家少走点弯路 一 maven中央仓库简介 相关内容
  • IOS-----手动创建Main界面

    1 删除info plist中的Main设置 2 创建MainViewController h 和MainViewController m xff08 1 xff09 布局界面 xff1a UIViewController instance
  • 【转载+修改】通过ssh 转发 X 图形界面

    转载自 xff1a http linux chinaitlab com administer 742586 html 过程精简如下 xff1a 1 配置你要链接到的机器的sshd 在 etc ssh sshd config 中将 Allow
  • [已解决]IDEA各文件类变成灰色的处理方法

    这是我遇到的问题 xff0c 创建好一个工程后 xff0c 各文件类变成了灰色 大概总结网上所说的的原因和处理方法 xff0c 可能是由于pom xml没有成功被解析 解决方法一 xff1a 右键点击这个pom文件 xff0c 选择将其添加
  • ubuntu安装opencv的正确方法

    本文介绍的是如何安装ubuntu下C 43 43 接口的opencv 1 安装准备 xff1a 1 1安装cmake sudo apt get install cmake 1 2依赖环境 sudo apt get install build
  • Ubuntu16.04升级 Ubuntu18.04

    Ubuntu16 04升级 Ubuntu18 04 1 更新资源 sudo apt get update sudo apt get upgrade sudo apt dist upgrade 2 安装update manager core
  • C++那些细节--typedef关键字

    一 简介 关于typedef关键字 xff0c 以前刚刚学C语言的时候 xff0c 用它来重定义结构体别名 之后的话就是在用函数指针的时候用过一些 xff0c 然而并不知道这个还有什么用处 今天花点时间总结一下typedef的细节 在计算机
  • python图片识别之tesseract

    经过两个下午的尝试 xff0c 终于搞出来了 xff1b 特记录下来备忘 xff1b 首先来看python代码识别图片 xff0c 这一段较为简单 xff1b span class token keyword from span PIL s
  • 游戏设计流失点总结

    xff08 1 xff09 直接彻底玩不懂 比如我之前的很多游戏 xff0c 玩家不知道怎么玩的挫败感会直接让ta去寻找更容易理解游戏 xff08 2 xff09 文字量太大 xff0c 懒得去学 有些游戏虽然有教程 xff0c 但是是长达
  • Rust安装(windows)

    windows安装Rust开发环境指南 Rust的安装非常简单 xff0c 官网下载安装包双击就能安装 xff0c 但是在windows上使用总是能遇到一些问题 xff0c 今天我们就来踩踩坑 设置安装路径 当你安装Rust的时候会发现没法
  • Debian安装中文包和输入法(针对中文无法显示)

    配置编码 xff1a python view plain copy aptitude install locales dpkg reconfigure locales 进入选择 xff1a zh CN GB2312 zh CN GBK GB
  • (转载)C++中枚举与字符串相互转换

    C 43 43 中枚举与字符串相互转换 前言 有的时候我们喜欢使用一些外部的文件保存管理一些配置信息 xff0c 这些配置文件大多都是文本格式例如ini xff0c xml等 xff0c 这样方便编辑和管理 因此在使用的过程中必然会遇到各种
  • UDS的DTC和J1939的SPN和FIM的区别

    标准故障码字符所属系统 00 P Powertrain 动力系统故障 01 C Chassis 底盘故障 10 B Body 车身故障 11 U Network 网络故障 DTC故障码表示是通过UDS请求 获取到的故障 服务是19 和参数读
  • WebSocketClient发送数据,和webSocketClient接收消息

    webSocketClient发送消息 span class token annotation punctuation 64 Override span span class token keyword public span span c