ACS自助借还服务端模拟工具(3M SIP2协议)

news2024/10/23 2:44:47

点击下载《ACS自助借还服务端模拟工具(源代码)》

1. 前言

在当今科技迅猛发展的时代,自助服务系统已成为提升用户体验和运营效率的关键。为了满足自助借还软件辅助开发的需求,我们精心打造了一款功能强大的ACS服务端模拟软件。这款软件不仅具备接收并处理客户端消息的核心能力,还能根据用户配置智能地回应相应的消息,为开发者提供了一个高效、便捷的测试与验证平台。

ACS服务端模拟软件在设计之初就充分考虑了易用性和可扩展性。通过直观的界面和详尽的配置选项,用户能够轻松设置服务端的行为模式,模拟各种实际场景下的交互流程。能够无缝对接各种自助借还系统的客户端,确保测试的全面性和准确性。

除了作为辅助开发工具,这款软件还具备二次开发的潜力。通过开放的API接口和强大的功能框架,开发者可以根据自身需求对软件进行定制和扩展,将其打造成为真正的ACS服务端软件。这一特性使得软件的应用范围更加广泛,能够满足不同行业、不同场景下的自助服务需求。

在这里插入图片描述

2. 功能介绍及使用

软件运行环境:Win10 x64
编译工具:Visual Studio 2022
数据库:Sqlite3

特别说明

程序运行前记得将源代码目录下的DataServer.db拷贝至exe所在目录,DataServer.db中有初始化的数据哦!

以下为软件主界面。

在这里插入图片描述

2.1 新增消息

在这里插入图片描述

新增接口有两种操作方式:

1、点击已有消息列表,然后单击鼠标右键,点击【新增消息】,然后录入接口所需数据,点击【保存消息】即可。

2、直接点击【新增消息】,然后录入接口所需数据,点击【保存消息】即可。

以下为部分代码片段

//添加接口
private void AddInterface()
{
    try
    {
        string strSql = "select max(id) as id from interface";
        DataTable dataTable = sqliteDBHelper.ExecuteDataTable(strSql, null);
        string strId = dataTable.Rows[0]["id"].ToString();
        int id = 0;
        if (string.IsNullOrEmpty(strId))
        {
            id = 1;
        }
        else
        {
            id = Int32.Parse(strId) + 1;
        }

        strSql = "insert into interface(id, message_code, remark, result, status, success, fail)" +
            "values(@id, @message_code, @remark, @result, @status, @success, @fail)";
        SQLiteParameter[] parameters = {
            new SQLiteParameter{
                ParameterName = "id",
                Value = id
            },
            new SQLiteParameter{
                ParameterName = "message_code",
                Value = messageCodeTextBox.Text.Trim()
            },
            new SQLiteParameter{
                ParameterName = "remark",
                Value = remarkTextBox.Text.Trim()
            },
            new SQLiteParameter{
                ParameterName = "result",
                Value = resultComboBox.SelectedIndex
            },
            new SQLiteParameter{
                ParameterName = "status",
                Value = statusComboBox.SelectedIndex
            },
            new SQLiteParameter{
                ParameterName = "success",
                Value = successTextBox.Text
            },
            new SQLiteParameter{
                ParameterName = "fail",
                Value = failTextBox.Text
            },
        };

        sqliteDBHelper.ExecuteNonQuery(strSql, parameters);
        //增加新节点
        string name = $"{messageCodeTextBox.Text}-{remarkTextBox.Text}";
        int status = statusComboBox.SelectedIndex;
        TreeNode rootNode = treeView.Nodes.Add(id.ToString(), name, status, status);
        isAddNewInterface = false;
    }
    catch (Exception ex)
    {
        ShowErrorMessageBox(ex.Message);
    }
}

2.2 修改消息

左键单击选中任意消息记录,可以看到该消息的数据已经回显到相应的输入框中,直接修改数据,确定无误后点击【保存消息】即可。

在这里插入图片描述

以下为部分代码片段

//修改接口
private void UpdateInterface()
{
	try
	{
		if (currentSelectInterfaceTreeNode == null)
		{
			return;
		}

		string strSql = "UPDATE interface SET message_code = @message_code, " +
			"remark=@remark, result=@result, " +
			"status=@status, success=@success, fail=@fail WHERE id=@id; ";
		SQLiteParameter[] parameters = {
			new SQLiteParameter{
				ParameterName = "id",
				Value = currentSelectInterfaceTreeNode.Name
			},
			new SQLiteParameter{
				ParameterName = "message_code",
				Value = messageCodeTextBox.Text.Trim()
			},
			new SQLiteParameter{
				ParameterName = "remark",
				Value = remarkTextBox.Text.Trim()
			},
			new SQLiteParameter{
				ParameterName = "result",
				Value = resultComboBox.SelectedIndex
			},
			new SQLiteParameter{
				ParameterName = "status",
				Value = statusComboBox.SelectedIndex
			},
			new SQLiteParameter{
				ParameterName = "success",
				Value = successTextBox.Text
			},
			new SQLiteParameter{
				ParameterName = "fail",
				Value = failTextBox.Text
			},
		};

		sqliteDBHelper.ExecuteNonQuery(strSql, parameters);

		//修改节点
		int status = statusComboBox.SelectedIndex;
		string name = $"{messageCodeTextBox.Text}-{remarkTextBox.Text}";
		currentSelectInterfaceTreeNode.Text = name;
		currentSelectInterfaceTreeNode.ImageIndex = status;
		currentSelectInterfaceTreeNode.SelectedImageIndex = status;

		isAddNewInterface = false;
	}
	catch (Exception ex)
	{
		ShowErrorMessageBox(ex.Message);
	}
}

2.3 删除消息

左键单击选中任意消息记录,单击鼠标右键,在弹出的邮件菜单中选择【删除消息】,然后在删除提示框中点击【确认】。

注意:消息删除后无法恢复,请谨慎操作!
在这里插入图片描述

以下为部分代码片段

//删除接口
private void DeleteInterface()
{
	try
	{
		string strSql = $"delete from interface WHERE id = '{currentSelectInterfaceTreeNode.Name}'";
		sqliteDBHelper.ExecuteNonQuery(strSql, null);

		//移除节点
		treeView.Nodes.Remove(currentSelectInterfaceTreeNode);
		isAddNewInterface = false;
	}
	catch (Exception ex)
	{
		ShowErrorMessageBox(ex.Message);
	}
}

2.4 启动服务

待消息配置完成后,直接点击启动服务即可。所有状态为启用的项目下的状态为启用的接口将会被监听,当有消息请求到来时,会根据回应消息设置的返回结果(设置为成功则返回成功结果,设置为失败则返回失败结果)将数据返回。
在这里插入图片描述

以下为部分代码片段

//启动服务
private void startServerButton_Click(object sender, EventArgs e)
{
	if (isStartServer)
	{
		isStartServer = false;
		startServerButton.Text = "启动服务";
		ipComboBox.Enabled = true;
		portTextBox.Enabled = true;                
		SetTipMessage("服务已停止!");
		tcpListener.Stop();
		return;
	}

	if (string.IsNullOrEmpty(ipComboBox.Text))
	{
		ShowErrorMessageBox("请选择本机Ip!");
		return;
	}

	if (string.IsNullOrEmpty(portTextBox.Text))
	{
		ShowErrorMessageBox("请输入端口!");
		portTextBox.Focus();
		return;
	}

	int port = Int32.Parse(portTextBox.Text);
	if ((port < 1025 || port > 65534))
	{
		ShowErrorMessageBox("端口仅能为1025~65534,且当前未被其他程序占用!");
		return;
	}

	startServerButton.Text = "停止服务";
	ipComboBox.Enabled = false;
	portTextBox.Enabled = false;
	SetConfigValue("Port", portTextBox.Text);
	SetConfigValue("Encoding", encodingComboBox.SelectedIndex.ToString());

	// 创建一个新的线程来运行监听器
	tcpListener = new TcpListener(IPAddress.Parse(ipComboBox.Text), Int32.Parse(portTextBox.Text));
	listenThread = new Thread(new ThreadStart(StartListening));
	listenThread.IsBackground = true;
	listenThread.Start();
}

我们使用SIP的客户端程序来测试一下返回结果:

在这里插入图片描述

2.5 其他

1、消息的【是否启用】标记用来表示该接口是否启用,启用状态时程序会正常响应并回复结果,【返回结果】用于表示当请求到来时返回的结果为【成功结果】或【失败结果】的内容。

2、左侧消息列表,绿色标记的为启用状态,红色标记的为禁用状态。

在这里插入图片描述

3. 总结

ACS服务端模拟软件,作为一款集多功能、易用性、高安全性于一体的开发利器,它不仅完美契合自助借还软件辅助开发的需求,更拥有通过深度定制和二次开发转化为真正ACS服务端软件的潜力。这款软件为各行各业的自助服务提供了高效且便捷的解决方案。借助它,开发者能够轻松模拟各种实际场景下的交互流程,确保客户端的功能和性能得以全面验证。

简而言之,ACS服务端模拟软件无疑是开发者的得力助手,它将为您的自助服务系统注入强大的动能,确保您的业务运行更为顺畅、可靠。

点击下载《ACS自助借还服务端模拟工具(源代码)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1844048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI音乐大模型:是创意的助力还是产业的挑战?

近期音乐界迎来了一场前所未有的革命。随着多家科技公司纷纷推出音乐大模型&#xff0c;素人生产音乐的门槛被前所未有地拉低&#xff0c;一个崭新的“全民音乐时代”似乎已近在眼前。然而&#xff0c;在这场技术革新的浪潮中&#xff0c;关于AI产品版权归属、创意产业如何在AI…

审稿人:拜托,请把模型时间序列去趋势!!

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 时间序列分析是数据科学中一个重要的领域。通过对时间序列数据的分析&#xff0c;我们可以从数据中发现规律、预测未来趋势以及做出决策…

体育时间:“中国第一”的出海代表们,一致瞄准了这一赛道?

2024年无疑又是一个体育赛事超级大年。 从1月的亚洲杯&#xff0c;2月的世乒团体锦标赛、第14届冬运会、到6月欧洲杯与美洲杯隔空对决&#xff0c;巴黎奥运会也将在7月盛大开赛&#xff0c;随后则还有8月的巴黎残奥会&#xff0c;对于期待万分的体育粉丝们&#xff0c;这将是极…

RapidLayout:中英文版面分析推理库

引言 继上一篇文章之后&#xff0c;我这里想着将360发布的版面分析模型整合到现有的rapid_layout仓库中&#xff0c;便于大家快速使用。 不曾想到&#xff0c;我这整理工作越做越多了&#xff0c;好在整体都是往更好方向走。 起初&#xff0c;rapid_layout项目是在RapidStru…

代码随想录训练营Day 64|卡码网98. 所有可达路径(深搜)

1.所有可达路径 98. 所有可达路径 | 代码随想录 代码&#xff1a; &#xff08;深搜&#xff09;邻接矩阵表示 #include <iostream> #include <vector> using namespace std; vector<int> path; vector<vector<int>> result; void dfs(const ve…

2024年史上最难就业季,该如何逆风翻盘?

前言 【2024年被称为最难就业年&#xff0c;1158万大学生面临难题】 IT互联网依然是大学生最向往行业&#xff0c;制造业受欢迎度升高智联招聘调研数据显示&#xff0c;2024届求职毕业生期望行业中&#xff0c;IT/通信/电子/互联网、政府/非盈利机构、文化/传媒/娱乐/体育行业…

urfread刷算法题day1|LeetCode2748.美丽下标的数目

题目 题目链接 LeetCode2748.美丽下标对的数目 题目描述 给你一个下标从 0 开始的整数数组 nums 。 如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c; 如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c; 则认为 nums[i] 和 nums…

大模型应用开发实践:RAG与Agent

RAG planning是任务拆解的一些方法。 Agent RAG现在基本上推荐LangChain开发框架。而Agent目前没有一个通用的好的开发框架/范式。 学习路径

uni-app的uni-list列表组件高效使用举例 (仿知乎日报实现)

目录 前言 uni-list组件介绍 基本使用 高级配置与自定义 仿知乎日报实现 知乎的api接口 后台服务实现 知乎日报首页 轮播图界面实现 客户端接口实现 uni-list列表使用 插入日期分割线 下滑分页的实现 完整页面代码 其他资源 前言 在移动应用开发领域&#xff0…

18V-180V降12V500mA恒压模块WT5118

18V-180V降12V500mA恒压模块WT5118 WT5118是一款能够将输入电压范围从18V至180V降低至12V并保持恒定输出电流500mA的恒压模块。 WT5118 是一款专为开关电源设计的集成了 180V 高电压 MOSFET 的 DC-DC 控制器。这个设备具备内置高压启动和自供电功能&#xff0c;能够满足快速启…

ICP备案调用公安身份证接口核验证件真实性未通过解决方法

网站备案或APP备案提供初审后提示管局审核未通过“调用公安身份证接口核验证件真实性未通过未通过信息为主体/网站负责人”被系统自动退回&#xff0c;阿里云百科整理详细调用公安身份证接口核验证件真实性未通过的解决方法&#xff1a; 原因分析&#xff1a;调用公安身份证接…

索引和深分页优化案例

一、初始状态没加索引 总数据100w左右 浅分页 查询10条需要1.5s左右 select * from timer_task where app hzhXtimer order by run_timer limit 0,10深分页查询10条需要1.7s左右 select * from timer_task where app hzhXtimer order by run_timer limit 100000,10看执…

论文阅读--Cross-view Transformers for real-time Map-view Semantic Segmentation

一种新的2D维度的bev特征提取方案&#xff0c;其通过引入相机先验信息&#xff08;相机内参和外参&#xff09;构建了一个多视图交叉注意力机制&#xff0c;能够将多视图特征映射为BEV特征。 cross view attention&#xff1a;BEV位置编码由根据相机标定结果&#xff08;内参和…

RabbitMQ(六)仲裁队列、流式队列、异地容灾(联邦队列Federation Queue)

文章目录 仲裁队列1、创建交换机2、创建仲裁队列3、验证主节点宕机不影响消息发送和接收 流式队列&#xff08;不推荐&#xff0c;Kafka主场&#xff09;概念 异地容灾一、Federation插件概述 二、Federation交换机1、总体说明2、准备工作3、启用联邦插件4、添加上游连接端点5、…

[Ansible详解]

Ansible 1.主机组清单设置 #组 #父组与子组[组名] [组名]ip ipip ip[组名 : vars] [组名2]ansible_user=用户 …

【已解决】better-scroll在PC端如何开启鼠标滚动以及如何始终显示滚动条

总结 需要安装插件 mouse-wheel 和 scrollbar 在PC端如何开启鼠标滚动? 需要安装官方提供的滚动插件&#xff1a;mouse-wheel https://better-scroll.github.io/docs/zh-CN/plugins/mouse-wheel.html 为了开启鼠标滚动功能&#xff0c;你需要首先引入 mouseWheel 插件&…

VBA基础知识点总结

VBA教程 VBScript教程 数据类型 数字数据类型 非数字数据类型 变量&常量 可以通过Dim、Public或Private语句声明变量。 变量语法&#xff1a;Dim <<variable_name>> As <<variable_type>>&#xff08;需要在使用它们之前声明&#xff09; 常量语…

对错问题:凡事没有绝对的对与错,要看义所在、良知所在

孔子说&#xff1a;君子对于天下所发生的很多事&#xff0c;如评判政策变动、战争等&#xff0c;没有绝对的对&#xff0c;也没有绝对的错&#xff0c;一切要看事情本身是否符合“ 义 ”。

[信号与系统]傅里叶变换、卷积定理、和为什么时域的卷积等于频域相乘。

前言 最近学习以下IIR滤波器和FIR滤波器 前置 1. 时域和频域 时域和频域代表着频率和时间与振幅的一一对应关系 2. 卷积运算 关于卷积的定义&#xff0c;详情请看 这篇文章能让你明白卷积 卷积运算是一种数学运算&#xff0c;广泛应用于信号处理、图像处理、控制系统和概…

吴恩达机器学习 第三课 week1 无监督学习算法(上)

目录 01 学习目标 02 无监督学习 03 K-means聚类算法 3.1 K-means聚类算法原理 3.2 k-means算法实现 3.3 利用k-means算法压缩图片 04 总结 01 学习目标 &#xff08;1&#xff09;了解无监督学习算法 &#xff08;2&#xff09;掌握K-means聚类算法实现步骤 &#xff…