Skip to content

客户端模块详解

工程概览

  • 工程文件: src-client/Client.vbp
  • 启动对象: fLogin
  • 输出文件: dist/客户端/Client.exe
  • 配置文件: config.ini

全局模块

Insts.bas

定义客户端全局共享的实例:

vb
Public TcpClient As cWinsock       ' TCP 连接对象
Public CurrentUser As New cJson    ' 当前登录用户信息缓存

ConnectToServer — 根据 config.ini 中的配置连接服务端:

vb
Public Sub ConnectToServer()
    With VBMAN.Ini.Section("Server")
        TcpClient.Connect .Item("IP"), .Item("Port")
    End With
End Sub

窗体模块

fLogin.frm — 登录窗体

界面元素:

  • Text1 — 用户名输入框
  • Text2 — 密码输入框(显示为 *
  • Command1 — 登录按钮
  • Command2 — 设置按钮(打开 fSetting
  • Picture2/Label4 — 状态栏(显示连接状态)
  • Timer1 — 重连定时器(3秒间隔)

核心逻辑:

  1. Form_Load:

    • 加载 config.ini,若服务器配置缺失则强制弹出 fSetting
    • 注册路由:User, Message, Notify
    • 初始化 TcpClient,尝试连接服务器
    • IDE 调试模式下自动填充测试账号 wangli / 123456
  2. Command1_Click (登录):

    vb
    With New cJson
        .Item("username") = Text1.Text
        .Item("password") = Common.Password(Text2.Text)
        Common.SendTo Insts.TcpClient, "user/login", .Root
    End With

    密码通过 Common.Password 使用 VBMAN 的哈希算法加密后发送。

  3. Tcp 事件:

    • Connect — 状态栏变绿,启用登录按钮
    • CloseEvent — 状态栏变红,禁用登录按钮,启动重连定时器
    • DataArrival — 调用 Common.HandleReciver 处理数据

Form1.frm — 客户端主窗体

界面布局:

  • List1 — 左侧功能列表(由 bCalc 初始化填充参数键名)
  • Text1 — 右侧编辑区(显示/编辑参数值或 JSON)
  • Text2 — 底部公告栏(浅蓝色背景,只读)
  • Label1 — 右上角状态标签

菜单:

  • 文件 → 设置 — 打开 fSetting,重新连接服务器
  • 文件 → 开机启动 — 切换 Windows 开机启动状态
  • 文件 → 修改密码 — 打开 fChangePwd,修改当前用户密码
  • 发送参数到服务器 — 将当前编辑的 50 个参数发送到服务端

核心逻辑:

  1. Form_Load:

    • 检查是否已登录(CurrentUser 是否为空),未登录则返回 fLogin
    • 接管 TcpClient 实例
    • 注册 Calc 路由
    • 请求最新公告 Notify/CheckNew
    • 初始化 bCalc 并绑定 List1Text1
  2. bCalc 集成:

    • List1 显示 50 个参数名
    • 点击参数名 → Text1 显示对应值,可直接编辑
    • 菜单发送 → 将完整 JSON 发送到服务端 Calc/Submit

fChangePwd.frm — 修改密码窗体

界面元素:

  • txtOldPwd — 旧密码输入框(密码显示)
  • txtNewPwd — 新密码输入框(密码显示)
  • txtNewPwd2 — 确认新密码输入框(密码显示)
  • cmdOK — 确定按钮
  • cmdCancel — 取消按钮
  • lblUser — 显示当前用户信息

核心逻辑:

  1. Form_Load:

    • 显示当前登录用户的昵称和账号
  2. cmdOK_Click (修改密码):

    • 本地验证:旧密码、新密码、确认密码非空
    • 验证两次输入的新密码是否一致
    • 验证新密码长度不少于 6 位
    • 发送请求到服务端 User/ChangePassword:
    vb
    With New cJson
        .Item("oldPassword") = Common.Password(OldPwd)
        .Item("newPassword") = Common.Password(NewPwd)
        Common.SendTo Insts.TcpClient, "User/ChangePassword", .Root
    End With
  3. cmdCancel_Click:

    • 关闭窗口

fSetting.frm — 服务器配置窗体

界面元素:

  • Text1 — 服务器 IP 输入框
  • Text2 — 端口输入框
  • Command1 — 保存按钮
  • Command2 — 退出程序按钮
  • Command3 — 关闭窗口按钮

核心逻辑:

  1. Form_Load:

    • config.ini 读取现有配置并填充
  2. Command1_Click (保存):

    vb
    With VBMAN.Ini.Section("Server")
        .Item("IP") = Text1.Text
        .Item("Port") = Text2.Text
    End With
    VBMAN.Ini.SaveTo

    保存后关闭窗口,调用方(fLogin)会继续尝试连接。


业务类

bUser.cls — 用户业务

方法说明
Info(Inst, Data)接收服务端返回的用户信息,解析保存到 CurrentUser,延时 2 秒后显示 Form1
ShowMainForm()Delay.Callback 异步调用,避免在 TCP 事件内直接切换窗体引发重入问题
ChangePassword(Inst, Data)接收服务端返回的密码修改结果,关闭修改密码窗口

异步显示主窗体的原因:

因为 bUser.Info 在 TCP 接收处理器内部执行,而 fLogin 也监听了 TCP 事件。如果直接在 InfoUnload fLogin,会引发事件重入冲突。因此使用 VBMAN.Delay.Callback(Me, "ShowMainForm").CountDown 2000 延迟 2 秒后异步执行。


bNotify.cls — 公告业务

方法说明
Show(Inst, Data)接收服务端推送的公告内容,显示在 Form1.Text2 中,同时弹出 Toast 通知

公告显示格式:

【公告】标题(发布时间)

公告正文内容...

bCalc.cls — 参数计算演示

这是一个完整的客户端-服务端数据交互演示类,包含 50 个多类型参数

数据类型覆盖:

类型字段示例VB 类型
长整型id, timeoutLong
整型age, screenWInteger
字节型grade, retryCountByte
货币型salary, revenueCurrency
单精度浮点height, velocitySingle
双精度浮点pressure, latDouble
布尔型isActive, isVipBoolean
日期型birthDate, joinAtDate
字符串型name, email, addressString

交互流程:

  1. CreateJsonData — 初始化 50 个参数到 JsonData 对象
  2. List1_Click — 选择参数,在 Text1 中显示值
  3. Inputor_Change — 编辑参数值,实时更新 JsonData
  4. SendJsonDataToServer — 发送完整 JSON 到服务端 Calc/Submit
  5. Show(Inst, Data) — 接收服务端修改后的数据,回显格式化 JSON 到 Text1

配置文件 (config.ini)

ini
[Server]
IP=127.0.0.1
Port=800
  • 首次启动时若配置缺失,会强制弹出 fSetting 要求填写
  • 配置保存在客户端同目录下

VB6及其LOGO版权为微软公司所有