diff --git a/CommonLibrary/Common.cs b/CommonLibrary/Common.cs
index 20b6ae9..09ed9ea 100644
--- a/CommonLibrary/Common.cs
+++ b/CommonLibrary/Common.cs
@@ -12,7 +12,7 @@ namespace CommonLibrary
{
//初始化模版的版本号
//预计第一个正式发行的版本为1.1.0 日期为2017-08-10
- SoftBasic.FrameworkVersion = new SystemVersion("1.0.5");
+ SoftBasic.FrameworkVersion = new SystemVersion("1.0.6");
}
diff --git a/CommonLibrary/CommonLibrary.csproj b/CommonLibrary/CommonLibrary.csproj
index eccbdfb..b3cbbc2 100644
--- a/CommonLibrary/CommonLibrary.csproj
+++ b/CommonLibrary/CommonLibrary.csproj
@@ -30,7 +30,7 @@
4
-
+
False
..\Public\HslCommunication.dll
diff --git a/CommonLibrary/HeadCode.cs b/CommonLibrary/HeadCode.cs
index 9b8c959..148eac5 100644
--- a/CommonLibrary/HeadCode.cs
+++ b/CommonLibrary/HeadCode.cs
@@ -15,47 +15,48 @@ namespace CommonLibrary
///
public static Guid KeyToken { get; set; } = new Guid("1275BB9A-14B2-4A96-9673-B0AF0463D474");
-
+
+
///
- /// 同步通信的头说明,以字母A开头,后面接B,C,D,E,F
+ /// 同步通信的指令头说明,以10000开头,后面接20000,30000,
///
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Auto)]
public class SimplifyHeadCode
{
- public static string 维护检查 { get; } = "A001";//A开始的表明是系统相关的
- public static string 更新检查 { get; } = "A002";
- public static string 账户检查 { get; } = "A003";
- public static string 参数下载 { get; } = "A004";
- public static string 密码修改 { get; } = "A005";
- public static string 更细账户信息 { get; } = "A006";
- public static string 获取账户信息 { get; } = "A007";
- public static string 更新公告 { get; } = "A008";
- public static string 注册账号 { get; } = "A009";
- public static string 更新版本号 { get; } = "A010";
- public static string 请求文件列表 { get; } = "A011";
- public static string 意见反馈 { get; } = "A012";
+ public static int 维护检查 { get; } = 10000;//10000开始的表明是系统相关的
+ public static int 更新检查 { get; } = 10001;
+ public static int 账户检查 { get; } = 10002;
+ public static int 参数下载 { get; } = 10003;
+ public static int 密码修改 { get; } = 10004;
+ public static int 更细账户 { get; } = 10005;
+ public static int 获取账户 { get; } = 10006;
+ public static int 更新公告 { get; } = 10007;
+ public static int 注册账号 { get; } = 10008;
+ public static int 更新版本 { get; } = 10009;
+ public static int 请求文件 { get; } = 10010;
+ public static int 意见反馈 { get; } = 10011;
- public static string 网络日志查看 { get; } = "B001";//B开头的是日志请求和清空
- public static string 网络日志清空 { get; } = "B002";
- public static string 同步日志查看 { get; } = "B003";
- public static string 同步日志清空 { get; } = "B004";
- public static string 更新日志查看 { get; } = "B005";
- public static string 更新日志清空 { get; } = "B006";
- public static string 运行日志查看 { get; } = "B007";
- public static string 运行日志清空 { get; } = "B008";
- public static string 共享文件日志查看 { get; } = "B009";
- public static string 共享文件日志清空 { get; } = "B010";
- public static string 建议反馈日志查看 { get; } = "B011";
- public static string 建议反馈日志清空 { get; } = "B012";
- public static string UDP日志查看 { get; } = "B013";
- public static string UDP日志清空 { get; } = "B014";
+ public static int 网络日志查看 { get; } = 11000;//11000开头的是日志请求和清空
+ public static int 网络日志清空 { get; } = 11001;
+ public static int 同步日志查看 { get; } = 11002;
+ public static int 同步日志清空 { get; } = 11003;
+ public static int 更新日志查看 { get; } = 11004;
+ public static int 更新日志清空 { get; } = 11005;
+ public static int 运行日志查看 { get; } = 11006;
+ public static int 运行日志清空 { get; } = 11007;
+ public static int 文件日志查看 { get; } = 11008;
+ public static int 文件日志清空 { get; } = 11009;
+ public static int 反馈日志查看 { get; } = 11010;
+ public static int 反馈日志清空 { get; } = 11011;
+ public static int UDP日志查看 { get; } = 11012;
+ public static int UDP日志清空 { get; } = 11013;
/**************************************************************************************
*
- * 为了保证您的指令头不和系统的冲突,您的指令头应该以C,D,E,F开头
+ * 为了保证您的指令头不和系统的冲突,您的指令头应该以20000之后开头
*
**************************************************************************************/
@@ -65,13 +66,13 @@ namespace CommonLibrary
///
public class MultiNetHeadCode
{
- public static string 所有客户端在线信息 { get; } = "H001";
- public static string 关闭所有客户端 { get; } = "H002";
- public static string 弹窗消息 { get; } = "H003";
- public static string 时间推送 { get; } = "H004";
- public static string 文件数量 { get; } = "H005";
- public static string 初始化数据 { get; } = "H006";
- public static string 留言消息 { get; } = "H007";
+ public static int 总在线信息 { get; } = 50000;
+ public static int 关闭客户端 { get; } = 50001;
+ public static int 弹窗新消息 { get; } = 50002;
+ public static int 时间的推送 { get; } = 50003;
+ public static int 文件总数量 { get; } = 50004;
+ public static int 初始化数据 { get; } = 50005;
+ public static int 留言版消息 { get; } = 50006;
/**************************************************************************************
diff --git a/Public/HslCommunication.dll b/Public/HslCommunication.dll
index 949e39a..42d488a 100644
Binary files a/Public/HslCommunication.dll and b/Public/HslCommunication.dll differ
diff --git a/Public/HslCommunication.xml b/Public/HslCommunication.xml
index e6d3709..fd8185b 100644
--- a/Public/HslCommunication.xml
+++ b/Public/HslCommunication.xml
@@ -532,6 +532,116 @@
+
+
+ 一个线程安全且高性能的日志记录类,文件格式为txt,编码为ANSI,支持4中消息等级的划分
+
+
+
+
+ 普通的消息等级
+
+
+
+
+ 信息的消息等级
+
+
+
+
+ 警告的消息等级
+
+
+
+
+ 错误的消息等级
+
+
+
+
+ 日志记录的路径,如果没有设置将不进行保存
+
+
+
+
+ 获取或设置日志存储的次数
+
+
+
+
+ 文件的存储读取锁
+
+
+
+
+ 日志列表操作的安全锁
+
+
+
+
+ 等待存储的日志的集合
+
+
+
+
+ 用于保存一般日志级别内容的方法
+
+ 需要保存的字符串
+
+
+
+ 用于保存信息级别日志内容的方法
+
+
+
+
+
+ 用于保存警告级别日志内容的方法
+
+
+
+
+
+ 用于保存错误日志内容的方法
+
+
+
+
+
+ 用于内部保存日志内容的方法
+
+
+
+
+
+
+ 文件的存储状态,0表示未存储,1表示存储中
+
+
+
+
+ 存储一个异常和简单描述的信息
+
+
+
+
+
+
+ 用于存储一个异常的方法
+
+
+
+
+
+ 调用此方法可以获得所有的日志信息,可以用来回发给客户端查看
+
+
+
+
+
+ 用于清空日志的所有内容,可以从外部调用
+
+
软件的邮箱类,用于发送邮箱数据,连续发送10次失败则禁止发送
@@ -707,11 +817,6 @@
流水号数字的标准长度,不够补0
流水号存储的文本位置
-
-
- 文件的保存状态
-
-
当前的生成序列号
@@ -762,6 +867,11 @@
指定一个新的文本头
+
+
+ 高性能存储块
+
+
包含整型和字符串描述的数据类型
@@ -859,6 +969,7 @@
数据库的连接字符串
sql语句,适合插入,更新,删除
返回受影响的行数
+
@@ -867,6 +978,7 @@
数据库的连接对象
sql语句,适合插入,更新,删除
返回受影响的行数
+
@@ -875,6 +987,8 @@
数据库的连接字符串
sql语句,选择数据表的语句
结果数据表
+
+
@@ -883,6 +997,7 @@
数据库连接对象
sql语句,选择数据表的语句
结果数据表
+
@@ -891,6 +1006,8 @@
数据库的连接字符串
sql语句,选择数据表的语句
结果数据集合
+
+
@@ -899,6 +1016,8 @@
数据库的连接对象
sql语句,选择数据表的语句
结果数据集合
+
+
@@ -907,6 +1026,8 @@
数据库的连接字符串
sql语句,选择数据表的语句
结果数据
+
+
@@ -915,6 +1036,8 @@
数据库的连接对象
sql语句,选择数据表的语句
结果数据
+
+
@@ -1052,194 +1175,85 @@
-
-
- 一个线程安全且高性能的日志记录类,文件格式为txt,编码为ANSI,支持4中消息等级的划分
-
-
-
-
- 普通的消息等级
-
-
-
-
- 信息的消息等级
-
-
-
-
- 警告的消息等级
-
-
-
-
- 错误的消息等级
-
-
-
-
- 日志记录的路径,如果没有设置将不进行保存
-
-
-
-
- 获取或设置日志存储的次数
-
-
-
-
- 文件的存储读取锁
-
-
-
-
- 日志列表操作的安全锁
-
-
-
-
- 等待存储的日志的集合
-
-
-
-
- 写入文件的次数
-
-
-
-
- 用于保存一般日志级别内容的方法
-
- 需要保存的字符串
-
-
-
- 用于保存信息级别日志内容的方法
-
-
-
-
-
- 用于保存警告级别日志内容的方法
-
-
-
-
-
- 用于保存错误日志内容的方法
-
-
-
-
-
- 用于内部保存日志内容的方法
-
-
-
-
-
-
- 文件的存储状态,0表示未存储,1表示存储中
-
-
-
-
- 存储一个异常和简单描述的信息
-
-
-
-
-
-
- 用于存储一个异常的方法
-
-
-
-
-
- 调用此方法可以获得所有的日志信息,可以用来回发给客户端查看
-
-
-
-
-
- 用于清空日志的所有内容,可以从外部调用
-
-
-
+
用于本程序集访问通信的暗号说明
-
+
+
+ 规定所有的网络传输指令头都为32字节
+
+
+
用于心跳程序的暗号信息
-
-
- 说明发送的只是文本信息
-
-
-
-
- 发送的数据就是普通的字节数组
-
-
-
+
客户端退出消息
-
+
因为客户端达到上限而拒绝登录
-
+
允许客户端登录到服务器
-
+
+
+ 说明发送的只是文本信息
+
+
+
+
+ 发送的数据就是普通的字节数组
+
+
+
+
+ 发送的数据就是普通的图片数据
+
+
+
请求文件下载的暗号
-
+
请求文件上传的暗号
-
+
文件校验成功
-
+
文件校验失败
-
+
文件保存失败
-
+
- 根据字符串数据生成带有暗号头的数据
+ 不压缩数据字节
-
-
-
+
- 根据字节数据生成带有暗号头的数据
+ 压缩数据字节
-
-
@@ -1397,69 +1411,69 @@
使用代码编辑器修改此方法的内容。
-
+
用来保存的文件信息类
-
+
文件的名称
-
+
文件的大小
-
+
用于用户自定义的标识
-
+
文件的上传人
-
+
文件的上传日期
-
+
文件的描述,说明备注
-
+
文件在服务器的实际存储路径
-
+
文件被下载的次数
-
+
文件的后缀名
-
+
获取大小
-
+
获取文件对象显示图标
-
+
根据文件后缀选择需要对应显示的文件图标,包含了二十多种常用文件的图标
@@ -1502,7 +1516,7 @@
-
+
新增一个文件对象
@@ -1529,7 +1543,7 @@
- 根据
+ 根据文件名称获取文件类型
@@ -1540,9 +1554,9 @@
-
+
- 将所有数据进行保存
+ 一个乐观并发模型高性能执行类
@@ -1626,6 +1640,11 @@
基于TCP的服务器引擎端核心类
+
+
+ 实例化一个网络服务器类对象
+
+
所支持的同时在线客户端的最大数量,商用限制1000个,最小10个
@@ -1637,7 +1656,20 @@
示例:"#IP:{0} Name:{1}"
+
+
+ 客户端在线信息缓存
+
+
+
+
+ 一个计算上线下线的高性能缓存对象
+
+
+
+ 计算所有客户端在线的信息
+
所有客户端的在线信息,使用#符号分隔开来
@@ -1704,44 +1736,45 @@
-
-
- 指令头接收方法
-
-
-
-
-
- 数据内容接收方法
-
-
-
-
+
服务器端用于数据发送文本的方法
数据发送对象
+ 用户自定义的数据对象,如不需要,赋值为0
发送的文本
-
+
服务器端用于发送字节的方法
数据发送对象
+ 用户自定义的数据对象,如不需要,赋值为0
实际发送的数据
-
+
服务端用于发送所有数据到所有的客户端
-
+ 用户自定义的命令头
+ 需要传送的实际的数据
-
+
服务端用于发送所有数据到所有的客户端
+ 用户自定义的命令头
需要群发客户端的字节数据
+
+
+ 数据处理中心
+
+
+
+
+
+
基于TCP通信的客户端核心类
@@ -1782,6 +1815,11 @@
远程服务器的IP地址和端口
+
+
+ 服务器的时间,自动实现和服务器同步
+
+
系统与服务器的延时时间,单位毫秒
@@ -1822,30 +1860,29 @@
启动客户端引擎,连接服务器系统
-
-
- 指令头接收方法
-
-
-
-
-
- 数据内容接收方法
-
-
-
-
+
服务器端用于数据发送文本的方法
+ 用户自定义的命令头
发送的文本
-
+
服务器端用于发送字节的方法
+ 用户自定义的命令头
实际发送的数据
+
+
+ 客户端的数据处理中心
+
+
+
+
+
+
心跳线程的方法
@@ -1863,26 +1900,36 @@
服务器的通信地址
-
+
客户端向服务器进行请求,请求字符串数据
-
+ 用户的指令头
+ 发送数据
-
+
+
+ 客户端向服务器进行请求,请求字符串数据
+
+ 用户的指令头
+
+
+
客户端向服务器进行请求,请求字节数据
+ 用户的指令头
-
+
需要发送的底层数据
- 需要发送的底层数据
数据的指令头
+ 用户的指令头
+ 需要发送的底层数据
@@ -1916,19 +1963,21 @@
关闭引擎
-
+
向指定的通信对象发送字符串数据
- 通信对象
+ 通信对象
+ 用户的指令头
实际发送的字符串数据
-
+
向指定的通信对象发送字节数据
-
-
+ 连接对象
+ 用户的指令头
+ 实际的数据
@@ -1936,6 +1985,22 @@
+
+
+ 处理异常的方法
+
+
+
+
+
+
+ 数据处理中心
+
+
+
+
+
+
用于服务器支持软件全自动更新升级的类
@@ -1970,7 +2035,7 @@
- 获取或设置一次接收时的数据长度
+ 获取或设置一次接收时的数据长度,默认2KB数据长度
@@ -1984,6 +2049,13 @@
关闭引擎
+
+
+ 重新开始接收数据
+
+
+
+
当接收到文本数据的时候,触发此事件
@@ -2005,17 +2077,25 @@
-
+
发送字节数据到服务器
+ 用户自定义的标记数据
字节数据
+
+
+
-
+
发送字符串数据到服务器
+ 用户自定义的标记数据
字符串数据
+
+
+
@@ -2040,7 +2120,7 @@
服务器的端口号
-
+
设置文件数据
@@ -2317,11 +2397,6 @@
UDP通信中的远程端
-
-
- 头子节数据标准长度
-
-
指令头缓存
@@ -2416,6 +2491,145 @@
+
+
+ 超时操作的类 [a class use to indicate the time-out of the connection]
+
+
+
+
+ 操作的开始时间
+
+
+
+
+ 操作是否成功
+
+
+
+
+ 延时的时间,单位毫秒
+
+
+
+
+ 连接超时用的Socket
+
+
+
+
+ 静态的方法支持类,提供一些网络的静态支持
+
+
+
+
+ 文件的读写缓存大小
+
+
+
+
+ 检查是否超时的静态方法
+
+
+
+
+
+
+ 判断两个字节是否相同
+
+ 第一个字节
+ 第二个字节
+
+
+
+
+ 判断两个字节的指定部分是否相同
+
+ 第一个字节
+ 第一个字节的起始位置
+ 第二个字节
+ 第二个字节的起始位置
+ 校验的长度
+ 返回是否相等
+
+
+
+
+ 读取socket数据的基础方法,只适合用来接收指令头,或是同步数据
+
+ 通信对象
+ 接收的长度
+
+
+
+
+
+
+
+
+ 读取socket指定长度数据并写入文件流中
+
+ 支持写入的文件流
+ 连接的套接字
+ 指定接收长度
+ 是否回发进度
+
+
+
+
+
+
+
+ 读取socket指定长度数据并写入文件流中
+
+ 支持写入的文件流
+ 指定接收长度
+ 是否回发进度
+ 套接字的属性
+
+
+
+ 读取文件流并将数据写入socket
+
+ 文件流
+ 连接的套接字
+ 要写入的长度
+
+
+
+ 生成终极传送指令的方法,所有的数据均通过该方法出来
+
+ 命令头
+ 自用自定义
+ 令牌
+ 字节数据
+
+
+
+
+ 解析接收到数据,先解压缩后进行解密
+
+
+
+
+
+
+ 获取发送字节数据的实际数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
一个网络通信类的基础类
@@ -2426,22 +2640,19 @@
用于通信工作的核心对象
+
+
+ 网络访问中的超时时间,单位:毫秒,默认值2200
+
+
当前对象的身份令牌,用来在网络通信中标识唯一的验证
-
+
- 判断两个字节是否相同
-
- 第一个字节
- 第二个字节
-
-
-
-
- 网络访问中的超时时间,单位:毫秒,默认值2200
+ 分次接收的数据长度
@@ -2450,40 +2661,6 @@
-
-
- 读取socket数据的基础方法
-
- 通信对象
- 接收的长度
-
-
-
-
- 读取socket指定长度数据并写入文件流中
-
- 支持写入的文件流
- 连接的套接字
- 指定接收长度
- 是否回发进度
-
-
-
- 读取socket指定长度数据并写入文件流中
-
- 支持写入的文件流
- 指定接收长度
- 是否回发进度
- 套接字的属性
-
-
-
- 读取文件流并将数据写入socket
-
- 文件流
- 连接的套接字
- 要写入的长度
-
不带参数的委托
@@ -2505,12 +2682,16 @@
object1
object2
-
+
- 将字节数组转化为16进制的字符串
+ 带三个参数的委托
- 字节数组
- 字符串
+ T1
+ T2
+ T3
+ object1
+ object2
+ object3
@@ -2530,6 +2711,39 @@
+
+
+ 重新开始接收下一次的数据传递
+
+
+
+
+
+ 指令头接收方法
+
+
+
+
+
+ 数据内容接收方法
+
+
+
+
+
+ 同步数据的接收的块
+
+ 网络的套接字
+
+
+
+ 数据处理中心,应该继承重写
+
+ 连接状态
+ 协议头
+ 用户自定义
+ 数据内容
+
处理异常的方法,该方法需要在服务器端进行重写
@@ -2537,14 +2751,6 @@
-
-
- 用于同步通信中数据转换成实际发送的数据
-
- 等待发送的数据
- 数据头
- 实际发送的数据
-
指示是否在发送结束后关闭套接字
@@ -2663,27 +2869,42 @@
修改数据的算法
-
+
- 操作结果的类
+ 一个用于高性能,乐观并发模型控制操作的类
-
+
+
+ 操作状态,0是未操作,1是操作中
+
+
+
+
+ 需要操作的次数
+
+
+
+
+ 操作结果的类,只带有成功标志和错误信息
+
+
+
指示本次访问是否成功
-
+
具体的错误描述
-
+
具体的错误代码
-
+
获取错误代号及文本描述
@@ -2691,7 +2912,7 @@
- 操作结果的字符串类
+ 操作结果的类,除了带有成功标志和错误信息,还带有一个字符串数据
@@ -2701,7 +2922,7 @@
- 操作结果的字节数组类
+ 操作结果的类,除了带有成功标志和错误信息,还带有一个字节数据
@@ -2865,7 +3086,7 @@
- 异步的多PLC请求类,可以同时并发的向多个PLC发起请求,该类使用非阻塞的高性能方式实现
+ 异步的多PLC请求类,可以同时并发的向多个PLC发起请求,该类使用非阻塞的高性能方式实现,需要好好测试
@@ -3811,25 +4032,24 @@
根据自定义初始化方法进行初始化串口信息
-
+
- 超时连接的类 [a class use to indicate the time-out of the connection]
+ 一个负责压缩解压数据字节的类
-
+
- 开始连接或是请求的时间
+ 压缩字节数据
+ 等待被压缩的数据
+ 压缩之后的数据
-
+
- 获取或设置是否连接成功,默认为False
-
-
-
-
- 用于连接或是工作的套接字
+ 解压压缩后的数据
+ 压缩后的数据
+ 压缩前的原始数据
diff --git a/软件系统客户端模版/FormDownloading.cs b/软件系统客户端模版/FormDownloading.cs
index 5bb4db5..12b9b66 100644
--- a/软件系统客户端模版/FormDownloading.cs
+++ b/软件系统客户端模版/FormDownloading.cs
@@ -22,10 +22,10 @@ namespace 软件系统客户端模版
public partial class FormDownloading : Form
{
- public FormDownloading(string cmd,Action action)
+ public FormDownloading(int customer,Action action)
{
InitializeComponent();
- net_cmd = cmd;
+ net_cmd = customer;
DealWithResult = action;
DoubleBuffered = true;
}
@@ -84,7 +84,7 @@ namespace 软件系统客户端模版
}
- private string net_cmd = "";
+ private int net_cmd = 0;
private Action DealWithResult = null;
private void ThreadRequestServer()
diff --git a/软件系统客户端模版/FormLog.cs b/软件系统客户端模版/FormLog.cs
index 7ae42e8..30e3657 100644
--- a/软件系统客户端模版/FormLog.cs
+++ b/软件系统客户端模版/FormLog.cs
@@ -30,7 +30,7 @@ namespace 软件系统客户端模版
}
- private void ReadFromServer(string head_code)
+ private void ReadFromServer(int head_code)
{
OperateResultString result = net_simplify_client.ReadFromServer(head_code);
if (result.IsSuccess)
@@ -40,7 +40,7 @@ namespace 软件系统客户端模版
}
else textBox1.Text = result.ToMessageShowString();
}
- private void ClearFromServer(string head_code)
+ private void ClearFromServer(int head_code)
{
OperateResultString result = net_simplify_client.ReadFromServer(head_code);
if (result.IsSuccess) textBox1.Text = "清除成功";
@@ -88,22 +88,22 @@ namespace 软件系统客户端模版
}
private void userButton9_Click(object sender, EventArgs e)
{
- ReadFromServer(CommonHeadCode.SimplifyHeadCode.共享文件日志查看);
+ ReadFromServer(CommonHeadCode.SimplifyHeadCode.文件日志查看);
}
private void userButton8_Click(object sender, EventArgs e)
{
- ClearFromServer(CommonHeadCode.SimplifyHeadCode.共享文件日志清空);
+ ClearFromServer(CommonHeadCode.SimplifyHeadCode.文件日志清空);
}
private void userButton11_Click(object sender, EventArgs e)
{
- ReadFromServer(CommonHeadCode.SimplifyHeadCode.建议反馈日志查看);
+ ReadFromServer(CommonHeadCode.SimplifyHeadCode.反馈日志查看);
}
private void userButton10_Click(object sender, EventArgs e)
{
- ClearFromServer(CommonHeadCode.SimplifyHeadCode.建议反馈日志清空);
+ ClearFromServer(CommonHeadCode.SimplifyHeadCode.反馈日志清空);
}
private void userButton13_Click(object sender, EventArgs e)
{
diff --git a/软件系统客户端模版/FormLogin.cs b/软件系统客户端模版/FormLogin.cs
index 07a6685..493e437 100644
--- a/软件系统客户端模版/FormLogin.cs
+++ b/软件系统客户端模版/FormLogin.cs
@@ -93,6 +93,7 @@ namespace 软件系统客户端模版
private void userButton_login_Click(object sender, EventArgs e)
{
+
label_status.Visible = true;
//验证输入
if (string.IsNullOrEmpty(textBox_userName.Text))
@@ -174,6 +175,7 @@ namespace 软件系统客户端模版
OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.维护检查);
if(result.IsSuccess)
{
+ byte[] temp = Encoding.Unicode.GetBytes(result.Content);
//例如返回结果为1说明允许登录,0则说明服务器处于维护中,并将信息显示
if (result.Content != "1")
{
@@ -204,11 +206,12 @@ namespace 软件系统客户端模版
// 以下展示了服务器校验的方法,如您需要数据库校验,请删除下面并改成SQL访问验证的方式
//包装数据
- Newtonsoft.Json.Linq.JObject json = new Newtonsoft.Json.Linq.JObject();
- json.Add(UserAccount.UserNameText, new Newtonsoft.Json.Linq.JValue(textBox_userName.Text));
- json.Add(UserAccount.PasswordText, new Newtonsoft.Json.Linq.JValue(textBox_password.Text));
-
- result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.账户检查+json.ToString());
+ JObject json = new JObject
+ {
+ { UserAccount.UserNameText, new Newtonsoft.Json.Linq.JValue(textBox_userName.Text) },
+ { UserAccount.PasswordText, new Newtonsoft.Json.Linq.JValue(textBox_password.Text) }
+ };
+ result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.账户检查, json.ToString());
if (result.IsSuccess)
{
//服务器应该返回账户的信息
diff --git a/软件系统客户端模版/FormMainWindow.cs b/软件系统客户端模版/FormMainWindow.cs
index 2205b20..04dcdeb 100644
--- a/软件系统客户端模版/FormMainWindow.cs
+++ b/软件系统客户端模版/FormMainWindow.cs
@@ -16,7 +16,7 @@ using HslCommunication.BasicFramework;
/***************************************************************************************
*
- * 模版日期 2017-05-20
+ * 模版日期 2017-06-16
* 创建人 胡少林
* 版权所有 胡少林
* 授权说明 模版仅授权个人使用,如需商用,请联系hsl200909@163.com洽谈
@@ -56,7 +56,7 @@ namespace 软件系统客户端模版
private void FormMainWindow_Load(object sender, EventArgs e)
{
//udp测试
- //SendServerUdpData("载入了窗体");
+ //SendServerUdpData(0, "载入了窗体");
//窗口载入
label_userName.Text = UserClient.UserAccount.UserName;
@@ -94,7 +94,7 @@ namespace 软件系统客户端模版
IsWindowShow = true;
//udp测试
- //SendServerUdpData("显示了窗体");
+ //SendServerUdpData(0, "显示了窗体");
//是否显示更新日志,显示前进行判断该版本是否已经显示过了
if (UserClient.JsonSettings.IsNewVersionRunning)
@@ -111,6 +111,8 @@ namespace 软件系统客户端模版
账户管理ToolStripMenuItem.Enabled = false;
远程更新ToolStripMenuItem.Enabled = false;
}
+ //启动定时器
+ TimeTickInitilization();
}
private void FormMainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
@@ -141,7 +143,7 @@ namespace 软件系统客户端模版
{ UserAccount.UserNameText, UserClient.UserAccount.UserName },
{ UserAccount.PasswordText, p }
};
- return UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.密码修改 + json.ToString()).IsSuccess;
+ return UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.密码修改, json.ToString()).IsSuccess;
}, 6, 8))
{
fpm.ShowDialog();
@@ -182,7 +184,7 @@ namespace 软件系统客户端模版
private void 更改公告ToolStripMenuItem_Click(object sender, EventArgs e)
{
using (FormInputAndAction fiaa = new FormInputAndAction(str => UserClient.Net_simplify_client.ReadFromServer(
- CommonHeadCode.SimplifyHeadCode.更新公告 + str).IsSuccess, UserClient.Announcement, "请输入公告内容"))
+ CommonHeadCode.SimplifyHeadCode.更新公告, str).IsSuccess, UserClient.Announcement, "请输入公告内容"))
{
fiaa.ShowDialog();
}
@@ -208,10 +210,10 @@ namespace 软件系统客户端模版
{
FormAccountManage fam = new FormAccountManage(() =>
{
- OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.获取账户信息);
+ OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.获取账户);
if (result.IsSuccess) return result.Content;
else return result.ToMessageShowString();
- }, m => UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.更细账户信息 + m).IsSuccess);
+ }, m => UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.更细账户, m).IsSuccess);
fam.ShowDialog();
fam.Dispose();
}
@@ -246,7 +248,7 @@ namespace 软件系统客户端模版
private void 意见反馈ToolStripMenuItem_Click(object sender, EventArgs e)
{
using (FormInputAndAction fiaa = new FormInputAndAction(str => UserClient.Net_simplify_client.ReadFromServer(
- CommonHeadCode.SimplifyHeadCode.意见反馈 + UserClient.UserAccount.UserName + ":" + str).IsSuccess, "", "请输入意见反馈:"))
+ CommonHeadCode.SimplifyHeadCode.意见反馈, UserClient.UserAccount.UserName + ":" + str).IsSuccess, "", "请输入意见反馈:"))
{
fiaa.ShowDialog();
}
@@ -274,48 +276,51 @@ namespace 软件系统客户端模版
SoftBasic.ShowExceptionMessage(ex);
}
}
-
- private void Net_socket_client_AcceptString(AsyncStateOne object1, string object2)
+ ///
+ /// 接收到服务器的字节数据的回调方法
+ ///
+ /// 网络连接对象
+ /// 用户自定义的指令头,用来区分数据用途
+ /// 数据
+ private void Net_socket_client_AcceptString(AsyncStateOne state, int customer, string data)
{
- //接收到服务器发来的字符串数据
- string head_code = object2.Substring(0, 4);
- if (head_code == CommonHeadCode.MultiNetHeadCode.弹窗消息)
+ if (customer == CommonHeadCode.MultiNetHeadCode.弹窗新消息)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
- FormPopup fpp = new FormPopup(object2.Substring(4), Color.DodgerBlue, 10000);
+ FormPopup fpp = new FormPopup(data, Color.DodgerBlue, 10000);
fpp.Show();
}));
}
- else if (head_code == CommonHeadCode.MultiNetHeadCode.所有客户端在线信息)
+ else if (customer == CommonHeadCode.MultiNetHeadCode.总在线信息)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
- listBox1.DataSource = object2.Substring(4).Split('#');
+ listBox1.DataSource = data.Split('#');
}));
}
- else if (head_code == CommonHeadCode.MultiNetHeadCode.关闭所有客户端)
+ else if (customer == CommonHeadCode.MultiNetHeadCode.关闭客户端)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
Close();
}));
}
- else if (head_code == CommonHeadCode.SimplifyHeadCode.更新公告)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.更新公告)
{
//此处应用到了同步类的指令头
if (IsHandleCreated) Invoke(new Action(() =>
{
- UserClient.Announcement = object2.Substring(4);
- label_Announcement.Text = object2.Substring(4);
- FormPopup fpp = new FormPopup(object2.Substring(4), Color.DodgerBlue, 10000);
+ UserClient.Announcement = data;
+ label_Announcement.Text = data;
+ FormPopup fpp = new FormPopup(data, Color.DodgerBlue, 10000);
fpp.Show();
}));
}
- else if (head_code == CommonHeadCode.MultiNetHeadCode.初始化数据)
+ else if (customer == CommonHeadCode.MultiNetHeadCode.初始化数据)
{
//收到服务器的数据
- JObject json = JObject.Parse(object2.Substring(4));
+ JObject json = JObject.Parse(data);
UserClient.DateTimeServer = json["Time"].ToObject();
if (IsHandleCreated) Invoke(new Action(() =>
{
@@ -323,36 +328,28 @@ namespace 软件系统客户端模版
label_file_count.Text = json["FileCount"].ToObject().ToString();
}));
}
- else if (head_code == CommonHeadCode.MultiNetHeadCode.文件数量)
+ else if (customer == CommonHeadCode.MultiNetHeadCode.文件总数量)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
- label_file_count.Text = object2.Substring(4);
+ label_file_count.Text = data;
}));
}
- else if (head_code == CommonHeadCode.MultiNetHeadCode.时间推送)
- {
- UserClient.DateTimeServer = Convert.ToDateTime(object2.Substring(4));
- if (IsHandleCreated) Invoke(new Action(() =>
- {
- toolStripStatusLabel_time.Text = UserClient.DateTimeServer.ToString("yyyy-MM-dd HH:mm") + $"({net_socket_client.DelayTime}ms)";
- }));
- }
- else if (head_code == CommonHeadCode.MultiNetHeadCode.留言消息)
+ else if (customer == CommonHeadCode.MultiNetHeadCode.留言版消息)
{
if (IsHandleCreated) Invoke(new Action(() =>
{
- UIControls_Chat?.DealwithReceive(object2.Substring(4));
+ UIControls_Chat?.DealwithReceive(data);
}));
}
}
- private void Net_socket_client_AcceptByte(AsyncStateOne object1, byte[] object2)
+ private void Net_socket_client_AcceptByte(AsyncStateOne object1, int customer, byte[] object2)
{
//接收到服务器发来的字节数据
if (IsHandleCreated) Invoke(new Action(() =>
{
- MessageBox.Show(BitConverter.ToInt32(object2, 0).ToString());
+ MessageBox.Show(customer.ToString());
}));
}
@@ -439,7 +436,7 @@ namespace 软件系统客户端模版
UIControls_Chat = new UIControls.OnlineChatRender((m) =>
{
- net_socket_client.Send(CommonHeadCode.MultiNetHeadCode.留言消息 + m);
+ net_socket_client.Send(CommonHeadCode.MultiNetHeadCode.留言版消息, m);
})
{
Visible = false,
@@ -491,12 +488,82 @@ namespace 软件系统客户端模版
/// 调用该方法并指定参数即可,最长字符串不得
///
///
- private void SendServerUdpData(string data)
+ private void SendServerUdpData(int customer, string data)
{
//测试发送udp消息
- UserClient.Net_Udp_Client.SendMessage(data);
+ UserClient.Net_Udp_Client.SendMessage(customer, data);
}
+ #endregion
+
+ #region 后台计数线程
+
+ /*********************************************************************************************
+ *
+ * 说明 一个后台线程,用来执行一些周期执行的东西
+ * 注意 它不仅执行每秒触发的代码,也支持每分钟,每天,每月,每年等等
+ *
+ ********************************************************************************************/
+
+
+ ///
+ /// 初始化后台的计数线程
+ ///
+ public void TimeTickInitilization()
+ {
+
+ Thread thread = new Thread(new ThreadStart(ThreadTimeTick));
+ thread.IsBackground = true;
+ thread.Start();
+ }
+
+ public void ThreadTimeTick()
+ {
+ Thread.Sleep(300);//加一个微小的延时
+ int second = DateTime.Now.Second - 1;
+ int minute = -1;
+ int hour = -1;
+ int day = -1;
+ Action DTimeShow = delegate
+ {
+ //显示服务器的时间和当前网络的延时时间,通常为毫秒
+ toolStripStatusLabel_time.Text = net_socket_client.ServerTime.ToString("yyyy-MM-dd HH:mm:ss") + $"({net_socket_client.DelayTime}ms)";
+ };
+
+ while (IsWindowShow)
+ {
+ while (DateTime.Now.Second == second)
+ {
+ Thread.Sleep(20);
+ }
+ second = DateTime.Now.Second;
+ if (IsWindowShow && IsHandleCreated) Invoke(DTimeShow);
+ //每秒钟执行的代码
+ UserClient.DateTimeServer = net_socket_client.ServerTime;
+
+ if (second == 0)
+ {
+ //每个0秒执行的代码
+ }
+ if (minute != DateTime.Now.Minute)
+ {
+ minute = DateTime.Now.Minute;
+ //每分钟执行的代码
+ }
+ if (hour != DateTime.Now.Hour)
+ {
+ hour = DateTime.Now.Hour;
+ //每小时执行的代码
+ }
+ if (day != DateTime.Now.Day)
+ {
+ day = DateTime.Now.Day;
+ //每天执行的代码
+ }
+ }
+ }
+
+
#endregion
}
}
diff --git a/软件系统客户端模版/FormRegisterAccount.cs b/软件系统客户端模版/FormRegisterAccount.cs
index a0a7897..de92fc8 100644
--- a/软件系统客户端模版/FormRegisterAccount.cs
+++ b/软件系统客户端模版/FormRegisterAccount.cs
@@ -51,7 +51,7 @@ namespace 软件系统客户端模版
account.LoginEnable = comboBox2.SelectedItem.ToString() == "允许";
account.ForbidMessage = textBox4.Text;
- OperateResultString result = net_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.注册账号 + account.ToJsonString());
+ OperateResultString result = net_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.注册账号, account.ToJsonString());
if (result.IsSuccess && result.Content == "1")
{
MessageBox.Show("注册成功!");
diff --git a/软件系统客户端模版/FormUpdateRemote.cs b/软件系统客户端模版/FormUpdateRemote.cs
index 9d80508..66571ff 100644
--- a/软件系统客户端模版/FormUpdateRemote.cs
+++ b/软件系统客户端模版/FormUpdateRemote.cs
@@ -48,8 +48,7 @@ namespace 软件系统客户端模版
private void userButton_version_Click(object sender, EventArgs e)
{
- OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.更新版本号 +
- textBox1.Text);
+ OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonHeadCode.SimplifyHeadCode.更新版本, textBox1.Text);
if (result.IsSuccess && result.Content == "1")
{
MessageBox.Show("更新成功!");
diff --git a/软件系统客户端模版/UIControls/ShareFilesRender.cs b/软件系统客户端模版/UIControls/ShareFilesRender.cs
index 6208b63..3f72234 100644
--- a/软件系统客户端模版/UIControls/ShareFilesRender.cs
+++ b/软件系统客户端模版/UIControls/ShareFilesRender.cs
@@ -43,10 +43,10 @@ namespace 软件系统客户端模版.UIControls
private void userButton_refresh_Click(object sender, EventArgs e)
{
//向服务器请求数据
- OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.请求文件列表);
+ OperateResultString result = UserClient.Net_simplify_client.ReadFromServer(CommonLibrary.CommonHeadCode.SimplifyHeadCode.请求文件);
if(result.IsSuccess)
{
- Cache_Files = JArray.Parse(result.Content).ToObject>();
+ Cache_Files = JArray.Parse(result.Content).ToObject>();
SetFilesShow(Cache_Files);
}
else
@@ -55,7 +55,7 @@ namespace 软件系统客户端模版.UIControls
}
}
- private void SetFilesShow(List files)
+ private void SetFilesShow(List files)
{
panel2.SuspendLayout();
//清楚缓存
@@ -113,7 +113,7 @@ namespace 软件系统客户端模版.UIControls
///
/// 所有文件信息的缓存,以支持直接的搜索
///
- private List Cache_Files { get; set; } = new List();
+ private List Cache_Files { get; set; } = new List();
///
/// 文件控件的缓存列表,方便清除垃圾
///
diff --git a/软件系统客户端模版/UserClient.cs b/软件系统客户端模版/UserClient.cs
index 0edb85a..922765d 100644
--- a/软件系统客户端模版/UserClient.cs
+++ b/软件系统客户端模版/UserClient.cs
@@ -69,12 +69,17 @@ namespace 软件系统客户端模版
CommonLibrary.CommonLibrary.Port_Second_Net))
{
KeyToken = CommonHeadCode.KeyToken,
+ ConnectTimeout = 5000,
};
///
/// 用于使用udp向服务器进行发送即时可丢失数据的对象
///
- public static Net_Udp_Client Net_Udp_Client = new Net_Udp_Client(new System.Net.IPEndPoint(System.Net.IPAddress.Parse(ServerIp),
- CommonLibrary.CommonLibrary.Port_Udp_Server));
+ public static Net_Udp_Client Net_Udp_Client = new Net_Udp_Client(
+ new System.Net.IPEndPoint(System.Net.IPAddress.Parse(ServerIp),
+ CommonLibrary.CommonLibrary.Port_Udp_Server))
+ {
+ KeyToken = CommonHeadCode.KeyToken,
+ };
}
}
diff --git a/软件系统客户端模版/软件系统客户端模版.csproj b/软件系统客户端模版/软件系统客户端模版.csproj
index 5fb8654..2131c0e 100644
--- a/软件系统客户端模版/软件系统客户端模版.csproj
+++ b/软件系统客户端模版/软件系统客户端模版.csproj
@@ -35,7 +35,7 @@
..\CommonLibrary\bin\Debug\CommonLibrary.dll
-
+
False
..\Public\HslCommunication.dll
diff --git a/软件系统服务端模版/Form1.cs b/软件系统服务端模版/Form1.cs
index b6b4dae..99c1fe9 100644
--- a/软件系统服务端模版/Form1.cs
+++ b/软件系统服务端模版/Form1.cs
@@ -15,7 +15,7 @@ using HslCommunication.BasicFramework;
/******************************************************************************************
*
- * 模版日期 2017-05-30
+ * 模版日期 2017-06-16
* 创建人 Richard.Hu
* 版权所有 Richard.Hu
* 授权说明 模版仅授权个人使用,如需商用,请联系hsl200909@163.com洽谈
@@ -167,7 +167,7 @@ namespace 软件系统服务端模版
using (FormInputAndAction fiaa = new FormInputAndAction(
m =>
{
- net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.弹窗消息 + m); return true;
+ net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.弹窗新消息, m); return true;
}))
{
fiaa.ShowDialog();
@@ -177,7 +177,7 @@ namespace 软件系统服务端模版
private void 一键断开ToolStripMenuItem_Click(object sender, EventArgs e)
{
//关闭信号发送至所有在线客户端
- net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.关闭所有客户端);
+ net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.关闭客户端, "");
}
private void 关于软件ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -305,31 +305,45 @@ namespace 软件系统服务端模版
///
/// 接收来自客户端的字节数据
///
- /// 客户端的地址
- /// 字节数据,根据实际情况选择是否使用
- private void Net_simplify_server_ReceivedBytesEvent(AsyncStateBase object1, byte[] object2)
+ /// 网络状态
+ /// 字节数据,根据实际情况选择是否使用
+ /// 来自客户端的字节数据
+ private void Net_simplify_server_ReceivedBytesEvent(AsyncStateOne state, int customer, byte[] data)
{
- net_simplify_server.SendMessage(object1, object2);
+ net_simplify_server.SendMessage(state, customer, data);
}
+
+
+
+
+ /******************************************************************************************************************
+ *
+ * 方法说明: 当接收到来自客户端的数据的时候触发的方法
+ * 特别注意: 如果你的数据处理中引发了异常,应用程序将会奔溃,SendMessage异常系统将会自动处理
+ *
+ ******************************************************************************************************************/
+
+
///
/// 接收到来自客户端的数据,此处需要放置维护验证,更新验证等等操作
///
- /// 客户端的地址
- /// 消息数据,应该使用指令头+数据组成
- private void Net_simplify_server_ReceiveStringEvent(AsyncStateBase object1, string object2)
+ /// 客户端的地址
+ /// 用于自定义的指令头,可不用,转而使用data来区分
+ /// 接收到的服务器的数据
+ private void Net_simplify_server_ReceiveStringEvent(AsyncStateOne state, int customer, string data)
{
//必须返回结果,调用SendMessage(object1,[实际数据]);
- if (object2.StartsWith("A"))
+ if (customer < 11000)
{
- DataProcessingWithStartA(object1, object2);
+ DataProcessingWithStartA(state, customer, data);
}
- else if (object2.StartsWith("B"))
+ else if (customer < 12000)
{
- DataProcessingWithStartB(object1, object2);
+ DataProcessingWithStartB(state, customer, data);
}
else
{
- net_simplify_server.SendMessage(object1, object2);
+ net_simplify_server.SendMessage(state, customer, data);
}
}
@@ -344,186 +358,186 @@ namespace 软件系统服务端模版
///
/// A指令块,处理系统基础运行的消息
///
- /// 网络状态对象
- /// 实际的数据
- private void DataProcessingWithStartA(AsyncStateBase object1, string object2)
+ /// 网络状态对象
+ /// 实际的数据
+ private void DataProcessingWithStartA(AsyncStateOne state, int customer, string data)
{
- string headCode = object2.Substring(0, 4);
- if (headCode == CommonHeadCode.SimplifyHeadCode.维护检查)
+ if (customer == CommonHeadCode.SimplifyHeadCode.维护检查)
{
- net_simplify_server.SendMessage(object1, UserServer.ServerSettings.Can_Account_Login ? "1" : "0" +
- UserServer.ServerSettings.Account_Forbidden_Reason);
+ net_simplify_server.SendMessage(state, customer, "1");
+ //UserServer.ServerSettings.Can_Account_Login ? "1" : "0" +
+ //UserServer.ServerSettings.Account_Forbidden_Reason);
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.更新检查)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.更新检查)
{
- net_simplify_server.SendMessage(object1, UserServer.ServerSettings.SystemVersion.ToString());
+ net_simplify_server.SendMessage(state, customer, UserServer.ServerSettings.SystemVersion.ToString());
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.参数下载)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.参数下载)
{
Newtonsoft.Json.Linq.JObject json = new Newtonsoft.Json.Linq.JObject();
json.Add(nameof(UserServer.ServerSettings.Announcement), new Newtonsoft.Json.Linq.JValue(UserServer.ServerSettings.Announcement));
- net_simplify_server.SendMessage(object1, json.ToString());
+ net_simplify_server.SendMessage(state, customer, json.ToString());
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.账户检查)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.账户检查)
{
//此处使用的是组件自带的验证的方式,如果使用SQL数据库,另行验证
- JObject json = JObject.Parse(object2.Substring(4));
+ JObject json = JObject.Parse(data);
//提取账户,密码
string name = SoftBasic.GetValueFromJsonObject(json, UserAccount.UserNameText, "");
string password = SoftBasic.GetValueFromJsonObject(json, UserAccount.PasswordText, "");
- net_simplify_server.SendMessage(object1, UserServer.ServerAccounts.CheckAccountJson(
- name, password, object1.GetRemoteEndPoint().Address.ToString()));
+ net_simplify_server.SendMessage(state, customer, UserServer.ServerAccounts.CheckAccountJson(
+ name, password, state.GetRemoteEndPoint().Address.ToString()));
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.更新公告)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.更新公告)
{
- UserServer.ServerSettings.Announcement = object2.Substring(4);
+ UserServer.ServerSettings.Announcement = data;
//通知所有客户端更新公告
- net_socket_server.SendAllClients(object2);
- net_simplify_server.SendMessage(object1, "成功");
+ net_socket_server.SendAllClients(customer, data);
+ net_simplify_server.SendMessage(state, customer, "成功");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.获取账户信息)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.获取账户)
{
//返回服务器的账户信息
- net_simplify_server.SendMessage(object1, UserServer.ServerAccounts.GetAllAccountsJson());
+ net_simplify_server.SendMessage(state, customer, UserServer.ServerAccounts.GetAllAccountsJson());
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.更细账户信息)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.更细账户)
{
//更新服务器的账户信息
- UserServer.ServerAccounts.LoadAllAccountsJson(object2.Substring(4));
- net_simplify_server.SendMessage(object1, "成功");
+ UserServer.ServerAccounts.LoadAllAccountsJson(data);
+ net_simplify_server.SendMessage(state, customer, "成功");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.密码修改)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.密码修改)
{
//更新服务器的账户密码,此处使用的是组件自带的验证的方式,如果使用SQL数据库,另行验证
- JObject json = JObject.Parse(object2.Substring(4));
+ JObject json = JObject.Parse(data);
//提取账户,密码
string name = SoftBasic.GetValueFromJsonObject(json, UserAccount.UserNameText, "");
string password = SoftBasic.GetValueFromJsonObject(json, UserAccount.PasswordText, "");
UserServer.ServerAccounts.UpdatePassword(name, password);
- net_simplify_server.SendMessage(object1, "成功");
+ net_simplify_server.SendMessage(state, customer, "成功");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.更新版本号)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.更新版本)
{
try
{
- UserServer.ServerSettings.SystemVersion = new SystemVersion(object2.Substring(4));
+ UserServer.ServerSettings.SystemVersion = new SystemVersion(data);
UserServer.ServerSettings.SaveToFile();
toolStripStatusLabel_version.Text = UserServer.ServerSettings.SystemVersion.ToString();
- net_simplify_server.SendMessage(object1, "1");
+ net_simplify_server.SendMessage(state, customer, "1");
}
catch
{
- net_simplify_server.SendMessage(object1, "0");
+ net_simplify_server.SendMessage(state, customer, "0");
}
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.注册账号)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.注册账号)
{
- bool result = UserServer.ServerAccounts.AddNewAccount(object2.Substring(4));
- net_simplify_server.SendMessage(object1, result ? "1" : "0");
+ bool result = UserServer.ServerAccounts.AddNewAccount(data);
+ net_simplify_server.SendMessage(state, customer, result ? "1" : "0");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.请求文件列表)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.请求文件)
{
- net_simplify_server.SendMessage(object1, net_simple_file_server.ToJsonString());
+ net_simplify_server.SendMessage(state, customer, net_simple_file_server.ToJsonString());
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.意见反馈)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.意见反馈)
{
- AdviceLogHelper.SaveInformation(object2.Substring(4));
- net_simplify_server.SendMessage(object1, "成功");
+ AdviceLogHelper.SaveInformation(data);
+ net_simplify_server.SendMessage(state, customer, "成功");
}
else
{
- net_simplify_server.SendMessage(object1, object2);
+ net_simplify_server.SendMessage(state, customer, data);
}
}
///
/// B指令块,处理日志相关的消息
///
- ///
- ///
- private void DataProcessingWithStartB(AsyncStateBase object1, string object2)
+ ///
+ /// 用户自定义的命令头
+ ///
+ private void DataProcessingWithStartB(AsyncStateOne state, int customer, string data)
{
- string headCode = object2.Substring(0, 4);
- if (headCode == CommonHeadCode.SimplifyHeadCode.网络日志查看)
+ if (customer == CommonHeadCode.SimplifyHeadCode.网络日志查看)
{
- net_simplify_server.SendMessage(object1, net_socket_server.LogHelper.GetLogText());
+ net_simplify_server.SendMessage(state, customer, net_socket_server.LogHelper.GetLogText());
RuntimeLogHelper.SaveInformation("网络日志查看");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.网络日志清空)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.网络日志清空)
{
net_socket_server.LogHelper.ClearLogText();
- net_simplify_server.SendMessage(object1, "成功");
+ net_simplify_server.SendMessage(state, customer, "成功");
RuntimeLogHelper.SaveWarnning("网络日志清空");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.同步日志查看)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.同步日志查看)
{
- net_simplify_server.SendMessage(object1, net_simplify_server.LogHelper.GetLogText());
+ net_simplify_server.SendMessage(state, customer, net_simplify_server.LogHelper.GetLogText());
RuntimeLogHelper.SaveInformation("同步日志查看");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.同步日志清空)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.同步日志清空)
{
net_simplify_server.LogHelper.ClearLogText();
- net_simplify_server.SendMessage(object1, "成功");
+ net_simplify_server.SendMessage(state, customer, "成功");
RuntimeLogHelper.SaveWarnning("同步日志清空");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.更新日志查看)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.更新日志查看)
{
- net_simplify_server.SendMessage(object1, net_soft_update_Server.LogHelper.GetLogText());
+ net_simplify_server.SendMessage(state, customer, net_soft_update_Server.LogHelper.GetLogText());
RuntimeLogHelper.SaveInformation("更新日志查看");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.更新日志清空)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.更新日志清空)
{
net_soft_update_Server.LogHelper.ClearLogText();
- net_simplify_server.SendMessage(object1, "成功");
+ net_simplify_server.SendMessage(state, customer, "成功");
RuntimeLogHelper.SaveWarnning("更新日志清空");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.运行日志查看)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.运行日志查看)
{
- net_simplify_server.SendMessage(object1, RuntimeLogHelper.GetLogText());
+ net_simplify_server.SendMessage(state, customer, RuntimeLogHelper.GetLogText());
RuntimeLogHelper.SaveInformation("运行日志查看");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.运行日志清空)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.运行日志清空)
{
RuntimeLogHelper.ClearLogText();
- net_simplify_server.SendMessage(object1, "成功");
+ net_simplify_server.SendMessage(state, customer, "成功");
RuntimeLogHelper.SaveInformation("运行日志清空");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.共享文件日志查看)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.文件日志查看)
{
- net_simplify_server.SendMessage(object1, net_simple_file_server.LogHelper.GetLogText());
+ net_simplify_server.SendMessage(state, customer, net_simple_file_server.LogHelper.GetLogText());
RuntimeLogHelper.SaveInformation("共享文件日志查看");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.共享文件日志清空)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.文件日志清空)
{
net_simple_file_server.LogHelper.ClearLogText();
- net_simplify_server.SendMessage(object1, "成功");
+ net_simplify_server.SendMessage(state, customer, "成功");
RuntimeLogHelper.SaveInformation("共享文件日志清空");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.建议反馈日志查看)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.反馈日志查看)
{
- net_simplify_server.SendMessage(object1, AdviceLogHelper.GetLogText());
+ net_simplify_server.SendMessage(state, customer, AdviceLogHelper.GetLogText());
RuntimeLogHelper.SaveInformation("建议反馈日志查看");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.建议反馈日志清空)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.反馈日志清空)
{
AdviceLogHelper.ClearLogText();
- net_simplify_server.SendMessage(object1, "成功");
+ net_simplify_server.SendMessage(state, customer, "成功");
RuntimeLogHelper.SaveWarnning("建议反馈日志清空");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.UDP日志查看)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.UDP日志查看)
{
- net_simplify_server.SendMessage(object1, net_udp_server.LogHelper.GetLogText());
+ net_simplify_server.SendMessage(state, 0, net_udp_server.LogHelper.GetLogText());
RuntimeLogHelper.SaveInformation("UDP日志查看");
}
- else if (headCode == CommonHeadCode.SimplifyHeadCode.UDP日志清空)
+ else if (customer == CommonHeadCode.SimplifyHeadCode.UDP日志清空)
{
net_udp_server.LogHelper.ClearLogText();
- net_simplify_server.SendMessage(object1, "成功");
+ net_simplify_server.SendMessage(state, customer, "成功");
RuntimeLogHelper.SaveWarnning("UDP日志清空");
}
else
{
- net_simplify_server.SendMessage(object1, object2);
+ net_simplify_server.SendMessage(state, customer, data);
}
}
@@ -557,11 +571,11 @@ namespace 软件系统服务端模版
net_socket_server.LogHelper.LogSaveFileName = Application.StartupPath + @"\net_log.txt";
net_socket_server.FormatClientOnline = "#IP:{0} Name:{1}";//必须为#开头,具体格式可由自身需求确定
net_socket_server.IsSaveLogClientLineChange = true;//设置客户端上下线是否记录到日志
- net_socket_server.ClientOnline += Net_socket_server_ClientOnline;//客户端上线触发
- net_socket_server.ClientOffline += Net_socket_server_ClientOffline;//客户端下线触发,包括异常掉线
- net_socket_server.MessageAlerts += Net_socket_server_MessageAlerts;//服务器产生提示消息触发
- net_socket_server.AcceptByte += Net_socket_server_AcceptByte;//服务器接收到字节数据触发
- net_socket_server.AcceptString += Net_socket_server_AcceptString;//服务器接收到字符串数据触发
+ net_socket_server.ClientOnline += new HslCommunication.NetBase.IEDelegate(Net_socket_server_ClientOnline);//客户端上线触发
+ net_socket_server.ClientOffline += new HslCommunication.NetBase.IEDelegate(Net_socket_server_ClientOffline);//客户端下线触发,包括异常掉线
+ net_socket_server.MessageAlerts += new HslCommunication.NetBase.IEDelegate(Net_socket_server_MessageAlerts);//服务器产生提示消息触发
+ net_socket_server.AcceptByte += new HslCommunication.NetBase.IEDelegate(Net_socket_server_AcceptByte);//服务器接收到字节数据触发
+ net_socket_server.AcceptString += new HslCommunication.NetBase.IEDelegate(Net_socket_server_AcceptString);//服务器接收到字符串数据触发
net_socket_server.ServerStart(CommonLibrary.CommonLibrary.Port_Main_Net);
}
catch (Exception ex)
@@ -570,13 +584,24 @@ namespace 软件系统服务端模版
}
}
- private void Net_socket_server_AcceptString(AsyncStateOne object1, string object2)
+
+
+ /******************************************************************************************************************
+ *
+ * 方法说明: 当接收到来自客户端的数据的时候触发的方法
+ * 特别注意: 如果你的数据处理中引发了异常,应用程序将会继续运行,该异常将会记录在网络日志中,
+ * 所以有必要的话,对可能发生的异常需要提前处理。
+ *
+ ******************************************************************************************************************/
+
+
+ private void Net_socket_server_AcceptString(AsyncStateOne object1, int customer, string data)
{
//如果此处充斥大量if语句,影响观感,则考虑进行指令头分类操作,客户端异步发送的字符串都会到此处处理
- if (object2.StartsWith("H"))
+ if (50000 <= customer && customer < 51000)
{
//H类系统指令
- DataProcessingWithStartH(object1, object2);
+ DataProcessingWithStartH(object1, customer, data);
}
}
@@ -584,22 +609,21 @@ namespace 软件系统服务端模版
///
/// H开头的处理块
///
- ///
- /// 指令头
- ///
- private void DataProcessingWithStartH(AsyncStateOne object1, string object2)
+ /// 网络状态
+ /// 用户自定义的指令头
+ /// 字符串数据
+ private void DataProcessingWithStartH(AsyncStateOne state, int customer, string data)
{
- string headCode = object2.Substring(0, 4);
- if (headCode == CommonHeadCode.MultiNetHeadCode.留言消息)
+ if (customer == CommonHeadCode.MultiNetHeadCode.留言版消息)
{
- string content = headCode + object1.LoginAlias + DateTime.Now.ToString(" yyyy-MM-dd HH:mm:ss") + Environment.NewLine + object2.Substring(4);
+ string content = state.LoginAlias + DateTime.Now.ToString(" yyyy-MM-dd HH:mm:ss") + Environment.NewLine + data;
//转发所有的客户端,包括发送者
- net_socket_server.SendAllClients(content);
+ net_socket_server.SendAllClients(customer, content);
}
}
- private void Net_socket_server_AcceptByte(AsyncStateOne object1, byte[] object2)
+ private void Net_socket_server_AcceptByte(AsyncStateOne state, int customer, byte[] data)
{
//如果此处充斥大量if语句,影响观感,则考虑进行指令头分类操作,客户端异步发送的字节数组都会到此处处理
}
@@ -630,11 +654,11 @@ namespace 软件系统服务端模版
{ "Time", new JValue(DateTime.Now) },
{ "FileCount", new JValue(net_simple_file_server.File_Count()) }
};
- net_socket_server.Send(object1, CommonHeadCode.MultiNetHeadCode.初始化数据 + json.ToString());
+ net_socket_server.Send(object1, CommonHeadCode.MultiNetHeadCode.初始化数据, json.ToString());
//此处决定要不要将在线客户端的数据发送所有客户端
- net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.所有客户端在线信息 + net_socket_server.AllClients);
+ net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.总在线信息, net_socket_server.AllClients);
//触发上下线功能
Net_socket_clients_change(DateTime.Now.ToString("MM-dd HH:mm:ss ") + object1._IpEnd_Point.Address.ToString() + ":" +
object1.LoginAlias + " 上线");
@@ -700,11 +724,12 @@ namespace 软件系统服务端模版
}
second = DateTime.Now.Second;
if (IsWindowShow && IsHandleCreated) Invoke(DTimeShow);
- //每隔一分钟将时间发送给所有客户端,格式为标准时间
+ //每秒钟执行的代码
+
if (second == 0)
{
- net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.时间推送 +
- DateTime.Now.ToString("O"));
+ //每个0秒执行的代码
+ //net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.时间的推送, DateTime.Now.ToString("O"));
}
if (minute != DateTime.Now.Minute)
{
@@ -760,7 +785,7 @@ namespace 软件系统服务端模版
private void Net_simple_file_server_FileChange()
{
//将文件数据发送给客户端
- net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.文件数量 + net_simple_file_server.File_Count());
+ net_socket_server.SendAllClients(CommonHeadCode.MultiNetHeadCode.文件总数量, net_simple_file_server.File_Count().ToString());
}
@@ -809,27 +834,28 @@ namespace 软件系统服务端模版
{
net_udp_server = new Net_Udp_Server();
net_udp_server.LogHelper.LogSaveFileName = Application.StartupPath + @"\udp_log.txt";//日志路径
+ net_udp_server.KeyToken = CommonHeadCode.KeyToken;
net_udp_server.ReceiveCacheLength = 1024;//单次接收数据的缓冲长度
net_udp_server.AcceptByte += Net_udp_server_AcceptByte;//接收到字节数据的时候触发事件
net_udp_server.AcceptString += Net_udp_server_AcceptString;//接收到字符串数据的时候触发事件
net_udp_server.ServerStart(CommonLibrary.CommonLibrary.Port_Udp_Server);
}
- catch(Exception ex)
+ catch (Exception ex)
{
SoftBasic.ShowExceptionMessage(ex);
}
}
- private void Net_udp_server_AcceptString(AsyncStateOne object1, string object2)
+ private void Net_udp_server_AcceptString(AsyncStateOne state, int customer, string data)
{
//此处为测试
Invoke(new Action(() =>
{
- textBox1.AppendText($"{DateTime.Now.ToString("MM-dd HH:mm:ss ")}来自IP:{object1._IpEnd_Point.Address.ToString()} 内容:{object2}{Environment.NewLine}");
+ textBox1.AppendText($"{DateTime.Now.ToString("MM-dd HH:mm:ss ")}来自IP:{state._IpEnd_Point.Address.ToString()} 内容:{data}{Environment.NewLine}");
}));
}
- private void Net_udp_server_AcceptByte(AsyncStateOne object1, byte[] object2)
+ private void Net_udp_server_AcceptByte(AsyncStateOne state, int customer, byte[] data)
{
//具体用法参考上面字符串方法
}
diff --git a/软件系统服务端模版/软件系统服务端模版.csproj b/软件系统服务端模版/软件系统服务端模版.csproj
index 26ec309..f9f58f2 100644
--- a/软件系统服务端模版/软件系统服务端模版.csproj
+++ b/软件系统服务端模版/软件系统服务端模版.csproj
@@ -35,7 +35,7 @@
..\CommonLibrary\bin\Debug\CommonLibrary.dll
-
+
False
..\Public\HslCommunication.dll