中国国旗 中国智造
中国国旗 中国智造

JOYZL SCADA Client

集成开发包

客户端集成开发包(JOYZL SCADA Client) 可用于快速集成并扩展 JOYZL SCADA 功能应用。 客户端(JOYZL SCADA Client) 将连接到 服务端(JOYZL SCADA Server) 并维持一个基于 TCP 的长连接。 Client 实例将维护链路心跳检测、 管理本地内存缓存以及处理服务端广播的默认行为。 在一个程序运行实例中只能创建一个 Client 实例。

通信协议基于 ODBS 二进制(字节)格式,与 HTTP JSON 接口相比较而言网络数据传输效率更高, 性能也更好,但对于集成方软件系统的运行环境具有额外要求。

客户端集成开发包(JOYZL SCADA Client)采用 Java 开发实现, 基于 Java SE 17 编译, 并全面支持 模块化(module)。 请确保您的软件系统集成开发环境基于 Java SE 17 或更高版本。

初始化实例

在调用任意接口之前,需要对模块执行初始化。

import com.joyzl.network.Executor;
import com.joyzl.scada.client.EntityHelper;
import com.joyzl.scada.client.Client;

public static void main(String[] args) {
	// 初始化线程池
	Executor.initialize(8);
	// 初始化实体构建器(null表示默认构建器)
	EntityHelper.bind(null);

	// 绑定签名核验事件
	Client.handler().setOnSignatured(new ClientEventHandler<>() {
		@Override
		public void handle(Action action) {
			if (action.hasSuccess()) {
				// 签名核验成功,可执行登录
				login();
			} else {
				System.out.println("签名核验失败");
				// 关闭客户端
				Client.close();
				// 关闭所有线程
				Executor.shutdown();
			}
		}
	});

	// 绑定错误报告事件
	Client.handler().setOnError(new ClientEventHandler<>() {
		@Override
		public void handle(Throwable e) {
			e.printStackTrace();
			// 关闭客户端
			Client.close();
		}
	});

	// 打开与服务端的连接
	Client.open("192.168.2.24", 1230);
}

调用接口

所有定义的接口继承自 Action 类型。 每个接口类型表示独立的操作行为(请求和响应)。 接口请求后采用异步模式响应,因此执行请求的线程不会阻塞。 使用方应基于已定义的接口进行继承,并通过特定方法执行本地行为。

Action 类型提供以下可重载方法执行本地行为:

  • void success(*):请求成功;
  • void failure():请求失败;
  • void finish():请求完成。

finish() 优先于 success(*)failure(); 客户端集成开发包(JOYZL SCADA Client) 实现 finish() 执行默认行为, 然后根据响应结果分别调用 success(*)failure()

提示: 所有接口请求与响应均设计为异步模式,没有提供任何同步模式。 异步模式在代码编写上会有一定难度,但在性能上获得较好收益。

// 用户登录
void login(){
	// 创建接口实例
	final UserLogin login = new UserLogin() {
		@Override
		protected void success(User entity) {
			// 登录成功
		}

		@Override
		protected void failure() {
			// 登录失败
			System.out.println(errorText());
		}
	};
	// 设置接口参数并调用
	login.setUsername("登录用户名");
	login.setPassword("登录密码");
	login.invoke();
}

接口定义请参考 接口文档。 接口实例执行 请求(invoke) 后将以同一个实例执行响应, 实例可多次使用,但应注意清理之前设置的参数和响应内容。

客户端事件

通过静态方法 Client.handler() 获取处理对象实例后绑定所需的客户端事件。

setOnConnected(
ClientEventHandlerr<Void>)

当客户端(Client)成功连接服务端(JOYZL SCADA Server)时,触发此事件。 此事件触发后,将自动发起签名校验。

setOnSent(
ClientEventHandler<Action>)

当任何 Action 对象发送(请求)成功后,触发此事件。

setOnExecute(
ClientEventHandlerr<Action>)

当任何 Action 执行本地行为时,触发此事件。 此事件通常用于改变 Action 本地行为的执行线程, 如果本地行为执行与 GUI 相关操作时,须委托到 GUI 线程执行。

setOnReceived(
ClientEventHandlerr<Action>)

当任何 Action 对象接收(响应)成功后,触发此事件。

setOnSignatured(
ClientEventHandlerr<Action>)

当签名校验返回时,触发此事件。 客户端(Client)必须通过与服务端(JOYZL SCADA Server)的签名校验后才能请求其它接口。 签名来自本地所有 Action 类型定义, 用于核对本地需要传输的实体定义与服务端相同。

setOnDisconnected(
ClientEventHandlerr<Void>)

当客户端(Client)与服务端(JOYZL SCADA Server)的连接断开时,触发此事件。

setOnError(
ClientEventHandlerr<Throwable>)

当连接出现任何异常时,触发此事件。

模块信息

// 模块名称
module com.joyzl.scada.client {
	// 实体对象定义
	requires transitive com.joyzl.scada.common;
	// 日志组件
	requires com.joyzl.logger;

	exports com.joyzl.scada.client;
	// 组织类接口
	exports com.joyzl.scada.client.people;
	// 通信类接口
	exports com.joyzl.scada.client.device;
	// 能源类接口
	exports com.joyzl.scada.client.energy;
	// 工厂类接口
	exports com.joyzl.scada.client.factory;
}
技术支持
电话 JOYZL SCADA 电话 QQ JOYZL SCADA QQ 微信 JOYZL SCADA 微信
技术支持
电话 JOYZL SCADA 电话
QQ JOYZL SCADA QQ 微信 JOYZL SCADA 微信