首页 > 计算机技术 > 后端开发 > Nim

B/S架构POS客户端开发之二-本地Web打印代理服务的实现

原创 lihf8515 2025年02月15日 17:54
来源:本站 阅读:422

本篇是 B/S架构POS客户端开发之二-本地Web打印代理服务的实现篇

接上篇,https://www.hfsoft.top/article/54.html B/S架构POS客户端开发之一-POS小票打印机动态链接库的实现
这里,我们使用Nim语言实现Web打印代理服务,为什么使用Nim语言而不使用C、Java或Python等语言呢?因为,Nim是一个优雅且高性能的静态语言,具有C语言的性能和Python语言的优雅高效,用它开发会起到高效、缩短开发周期的效果。

整个Web打印代理服务程序完全使用Nim语言,并且使用了其相关的第三方库,如:Prologue,它是一个全栈Web开发框架,开发一个Web服务非常简单。下面是完整代码:

import std/[encodings]
import wNim/[wApp]
import wNim/private/winimx
import prologue

{.link:"res/app.res".}

proc print*(ctx: Context) {.async.} =
  ctx.response.setHeader("Access-Control-Allow-Origin", "*")
  ctx.response.setHeader("Access-Control-Allow-Methods", "OPTIONS,PUT,GET,POST")
  ctx.response.setHeader("Access-Control-Allow-Credentials", "true")
  ctx.response.setHeader("Access-Control-Allow-Private-Network", "true")
  ctx.response.setHeader("Content-Type", "application/json;charset=utf-8")
  let cb = ctx.getQueryParams("callback")
  try:
    let json = parseJson(ctx.getQueryParams("data")) #获取参数
    let action = getStr(json["action"])
    let jiekou = getStr(json["interface"])
    let desktopHwnd = GetDesktopWindow()
    if action == "print":
      let opencash = getStr(json["opencash"])
      let cut = getStr(json["cut"])
      let blankrow = getStr(json["blankrow"])
      let data = encodings.convert(getStr(json["data"]), "GB2312", "UTF-8")
      let param = "print PrintOut1.txt " & jiekou & " " & opencash & " " & cut & " " & blankrow
      writeFile(r"PrintOut1.txt",data)
      let ret = ShellExecute(desktopHwnd, "open", "hfpos_print.exe", param, "", SW_HIDE)
      if ret > 32:
        resp cb & "(\"打印命令发送成功!\");"
      else:
        resp cb & "(\"打印命令发送失败!\");"
    elif action == "rijie":
      let opencash = getStr(json["opencash"])
      let cut = getStr(json["cut"])
      let blankrow = getStr(json["blankrow"])
      let data = encodings.convert(getStr(json["data"]), "GB2312", "UTF-8")
      let param = "print RiJie.txt " & jiekou & " " & opencash & " " & cut & " " & blankrow
      writeFile(r"RiJie.txt",data)
      let ret = ShellExecute(desktopHwnd, "open", "hfpos_print.exe", param, "", SW_HIDE)
      if ret > 32:
        resp cb & "(\"打印日结命令发送成功!\");"
      else:
        resp cb & "(\"打印日结命令发送失败!\");"
    elif action == "opencash":
      let param = "opencash " & jiekou
      let ret = ShellExecute(desktopHwnd, "open", "hfpos_print.exe", param, "", SW_HIDE)
      if ret > 32:
        resp cb & "(\"打开钱箱命令发送成功!\");"
      else:
        resp cb & "(\"打开钱箱命令发送失败!\");"
    elif action == "display":
      let display_type = getStr(json["display_type"])
      let ysje = getStr(json["ysje"])
      let baudrate = getStr(json["baudrate"])
      let param = "display " & display_type & " " & ysje & " " & jiekou & " " & baudrate
      let ret = ShellExecute(desktopHwnd, "open", "hfpos_print.exe", param, "", SW_HIDE)
      if ret > 32:
        resp cb & "(\"客显显示命令发送成功!\");"
      else:
        resp cb & "(\"客显显示命令发送失败!\");"
    else:
      resp cb & "(\"打印代理服务调用打印程序参数不正确!\");"
  except:
    let
      e = getCurrentException()
      msg = getCurrentExceptionMsg()
    resp cb & "(" & repr(e) & "\" 详细消息: \"" & msg & ");"

let
  settings = newSettings(appName = "hf pos agent server", debug = false)
let app = newApp(settings = settings)
app.addRoute("/", print, [HttpGet, HttpPost])
app.run()
作者
昵称:君子如兰
注册时间:2025-01-31 02:47:34
最近更新:2026-01-24 17:01:06
文章总数:94篇
原创 88篇   转载 6篇
友情链接: 海峰收银系统  
Copyright © 2025 hfsoft.top All Rights Reserved.
中华人民共和国工业和信息化部ICP备案序号:皖ICP备2025073039号