|
[color=rgba(0, 0, 0, 0.85)]创建一个单例类管理所有 Socket 连接
窗口程序集名 | 保 留 | 保 留 | 备 注 | 通信管理器 | | | | 变量名 | 类 型 | 数组 | 备 注 | 服务器 | HP_TcpServer ' 服务端模式 | | 客户Duan | HP_TcpClient ' 客户Duan模式 | | 窗口映射表 | 整数型 | 窗口句柄与SessionID映射 | 数据回调 | 子程序指针 | 数据到达回调函数 | 数据回调 = 回调函数 如果 (模式 = 0 )  服务器. 创建 () 服务器. 设置事件回调 (&OnServerConnect, &OnServerReceive, &OnServerClose ) 服务器. 启动 ("127.0.0.1", 8888 )  客户Duan. 创建 () 客户Duan. 设置事件回调 (&OnClientConnect, &OnClientReceive, &OnClientClose ) 客户Duan. 连接 ("127.0.0.1", 8888 )返回 (真)
[color=rgba(0, 0, 0, 0.85)]窗口在创建时向管理器注册,接收数据时通过回调或消息通知:
局部_SessionID = 取数组成员数 (窗口映射表 ) + 1 窗口映射表 [局部_SessionID ] = 窗口句柄 返回 (局部_SessionID ) |
OnServerReceive | 整数型 | | |
连接ID | 整数型 | | | | 数据 | 字节集 | | | | 数据长度 | 整数型 | | | |
局部_窗口句柄 = 窗口映射表 [连接ID ] 如果 (数据回调 != 0 ) 则 调用 数据回调 (局部_窗口句柄, 数据, 数据长度 )结束 返回 (0 )
[color=rgba(0, 0, 0, 0.85)]窗口通过管理器发送数据,无需关心底层通信细节
[color=rgba(0, 0, 0, 0.85)]
局部_SessionID = 0 计次循环首 (取数组成员数 (窗口映射表 ), i ) 如果 (窗口映射表 [i ] = 窗口句柄 )  局部_SessionID = i  跳出循环 ()  计次循环尾 () 如果 (局部_SessionID > 0 ) 如果 (取数组成员数 (服务器 ) > 0 )   服务器. 发送 (局部_SessionID, 数据, 取字节集长度 (数据 ))   .否则   客户Duan. 发送 (数据, 取字节集长度 (数据 ))  
|
|