autojs-双向通信

2024-01-14 13:38
文章标签 autojs 双向通信

本文主要是介绍autojs-双向通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

牙叔教程 简单易学

使用场景

socketIO

socketIO

SocketIO是在客户端和服务端之间建立的双向通信数据交换技术,在即时通讯、通知与消息推送,实时分析等场景中有较为广泛的应用。

效果展示

在这里插入图片描述

autojs版本

8.7.7-0

代码简介

通信是双向的, 所以既有客户端, 也有服务端

1. 服务端

使用koa框架搭建, 使用的主要模块是 "socket.io": "^4.0.1"

2. 客户端

socketIO模块依赖 implementation('io.socket:socket.io-client:2.0.0')
用android studio调试成功以后, 转成dex供给autojs使用

get知识点

  1. koa搭建socketIO
  2. autojs使用socketIO
  3. listView的item_bind, 添加控件监听事件
  4. 常见的socketIO使用方法
  5. 多用户的管理
  6. 多用户的消息传递
  7. 添加新用户, listView自动滚动到最底部, 让新添加的用户进入视野
  8. 随机颜色
  9. 获取用户对应的socket连接
  10. 用户进入房间, 用户离开房间
  11. 用户上线, 用户下线
  12. 格式化时间
  13. 调用java的字符串格式化
  14. 随机字符串
  15. nodemon的使用

代码讲解

服务端

1. 主脚本
io.on("connection", (socket) => {console.log("已连接" + socket.id);socket.on("userLogin", (userName) => {...});socket.on("disconnect", function () {...});socket.on("deleteUser", function (userName) {...});socket.on("joinRoom", function (userName, roomName) {...});socket.on("leaveRoom", function (userName) {...});socket.on("chat", function (chatContent) {...});
});
2. nodemon启动服务, 这样代码修改了不用自己再重启了
"dev": "nodemon index.js -i README.md"
npm run dev

客户端

1. 导入socketio依赖
let dexPath = "./classes_merge.dex";
log(dexPath);
runtime.loadDex(dexPath);
2. 导入需要使用的类
importClass(Packages.io.socket.client.IO);
importClass(Packages.io.socket.client.Socket);
importClass(Packages.io.socket.emitter.Emitter);
importClass(Packages.io.socket.engineio.client.transports.Polling);
importClass(Packages.io.socket.engineio.client.transports.WebSocket);
3. UI, 一共四个页面
  • 配置页面, 用于增加删除用户
  • 大厅页面, 用户上线离线日志
  • 房间1号日志页面. 1号房间的用户出入记录, 以及发言记录
  • 2号, 3号 与1号用途类似
<vertical><button id="回到配置页">回到配置页</button><viewpager id="viewpager"><vertical>增删用户页面</vertical><vertical padding="8">大厅日志页面</vertical><vertical padding="8">房间1号日志页面</vertical><vertical padding="8">房间2号日志页面</vertical><vertical padding="8">房间3号日志页面</vertical></viewpager>
</vertical>
4. 初始化用户数据
let userList = yashuUtil.getUserList();
ui.userList.setDataSource(userList);
5. 更新日志

由于更新日志的方法类似, 都是更新textView的内容, 只是viewId不一样, 所以要方法复用

function 更新日志(日志viewId, data) {let oldContent = ui[日志viewId].text();let newContent = oldContent + "\n" + data + yashuUtil.getTime();ui.run(function () {ui[日志viewId].setText(newContent);});
}
6. 用户点击单选按钮, 来选择进入那个房间
itemView.房间列表.setOnCheckedChangeListener(function (radioGroup, id) {let item = itemHolder.item;let viewId = radioGroup.getCheckedRadioButtonId();if (viewId !== -1) {let radioView = ui.findView(viewId);let value = radioView.getText().toString();if (radioView.checked) {let roomName = value;item.socket.emit("joinRoom", item.name, roomName);}}
});
7. 离开房间
itemView.leave.click(function () {itemView.房间列表.clearCheck();let item = itemHolder.item;item.socket.emit("leaveRoom", item.name);
});
8. 用户发言
itemView.send.click(function () {if (itemView.chatContent.text().length < 1) {log("聊天内容为空");return false;}let item = itemHolder.item;let user = yashuUtil.getCurrentUser(item.socket);if (user) {if (user.roomName) {item.socket.emit("chat", itemView.chatContent.text() + "   ");} else {log("用户没有加入房间");}} else {log("没找到用户");}
});
9. socket连接时, 注册监听事件
mSocket = IO.socket(baseUrl);
mSocket.on(Socket.EVENT_CONNECT, onConnect);
mSocket.on("disconnect", onDisconnect);
mSocket.on("userLogin", onUserLogin);
mSocket.on("userExit", onUserExit);
mSocket.on("joinedRoom", onJoinedRoom);
mSocket.on("leftRoom", onLeftRoom);
mSocket.on("chat", onChat);
mSocket.connect();
10. 退出时, 释放资源
events.on("exit", function () {yashuUtil.deleteAllUser();
});

下载源码


参考文章

  • socket.io 快速入门教程——聊天应用
  • 详解如何使用koa实现socket.io官网的例子

声明

部分内容来自网络

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述

在这里插入图片描述

这篇关于autojs-双向通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/605339

相关文章

Go 实现 WebSocket 的双向通信

在Go语言中实现WebSocket的双向通信通常需要使用第三方库,其中 gorilla/websocket 是一个非常流行和广泛使用的库。 1、安装 go get github.com/gorilla/websocket 2、编写WebSocket服务器代码 package mainimport ("fmt""github.com/gorilla/websocket""log""net/h

flask后端+网页前端:基于 socket.io 的双向通信和服务器部署

我想实现的效果是,我的服务器提供两个路由网址,网页A用于拍照、然后录音,把照片和录音传给服务器,服务器发射信号,通知另一个路由的网页B更新,把刚刚传来的照片和录音显示在网页上。 然后网页B用户根据这个照片和录音,回答一些问题,输入答案的文本,传给服务器。服务器拿到答案后,再发射信号,把这个结果显示在网页A上。 这就得用到双向通信(其实有点类似两个网页聊天的功能,而且支持发送语音、图片、文本三种

qiankun框架中基于actions机制实现主应用与子应用间的双向通信

文章目录 一、原理1、setGlobalState:2、onGlobalStateChange:3、offGlobalStateChange:4、图解 二、示例主应用1、在父应用中使用initGlobalState设置全局状态actions并导出供其他组件使用。2、在main.js中引入actions实例并在注册子应用时通过props传递全局状态actions:3、主应用中的组件要修改全局状

深入理解WebSocket:实时双向通信的利器

一、介绍 1.1 基础概念介绍 单工通信:数据传输只允许在一个方向上传输,只能一方发送数据,另一方接收数据并发送。半双工:数据传输允许两个方向上的传输,但在同一时间内,只可以有一方发送或接收数据。全双工:同时可进行双向数据传输。 1.2 WebSocket介绍 WebSocket是一种在单个TCP连接上进行全双工通信的协议,它能够在客户端和服务器之间建立实时、双向的通信通道。 与传统的H

c语言+pipe实现父子进程通信(双向通信+发送多条信息)

chatgpt写的,我调了一下,觉得挺好,发个博客记录一下 测试环境是ubuntu 感觉关键就是write的时候要sleep,然后写的时候要while读。总觉得怪怪的,干脆一次读写完算了。 #include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#i

autojs之ui-toolbar

本文主要是解决之前四史答题ui页面中退出按钮放到整个页面右上角的问题 将 <appbar><toolbar id="toolbar" bg="#ff4fb3ff" title="{{appName}}" /><button id="exit" text="退出" color="#ffffff" bg="#FF4FB3FF" /> </appbar> 改为 <ap

autojs之多线程-Threads

autojs多线程新手入门 autojs多线程新手入门 前言一、多线程使用须知二、个人理解三、多线程常用函数1.子线程开启函数2.子线程停止函数3.等待线程执行完成4.返回线程是否存活5.等待线程开始执行5.单次定时器6.循环定时器 四、多线程里的定时器五、弹窗检测总结 autojs之多线程-Threads 前言 我也是初初接触多线程,对于小白来说,可能会觉得无从下手,

autojs世界记忆大师都在用的方法

牙叔教程 简单易学 使用场景 记忆数字 世界记忆大师数字项目的训练分三个步骤:出图、联结和记忆。 每个编码都在脑子里呈现出清晰、完整、立体、生动、有感觉的图像,还可以是动态的。 不仅要看到它的样子,还要听到它的声音、闻到它的味道、感受它的触觉,用各种感官去理解编码、感受编码。 在记忆的时候,一定要做到以下几点:清晰,奇特,动态,连贯! 如果你的图象不清晰,在你记忆的过程中就像是看屏幕不清

Java网络编程 双向通信

目录 网络编程实例创建客户端创建服务端测试 网络编程 Java的网络编程是Java编程语言中用于实现网络通信的一组API和工具。通过Java的网络编程,开发人员可以在Java应用程序中实现客户端和服务器之间的通信,从而构建各种网络应用。 以下是Java网络编程的主要组件和概念: 套接字(Sockets):套接字是网络通信的基本单元,用于在客户端和服务器之间建立连接。Java

autox.js(autojs替代方案) 开发教程

用JavaScript编写不需要Root权限的android自动化软件 针对网上的多个版本区别做说明 autojs 是一个开源的自动化程序,之后因为被某些资本警告,导致该工具无法对某些应用进行操作autojs pro 原作者在autojs上提供了一个付费的工具,拥有更强大的功能,同样无法操作某些软件autox.js 网友维护的版本,可操作所有软件,并拥有大量autojs pro的功能