餐饮无线点菜机

来源:互联网 发布:淘宝刷注册单有风险吗 编辑:程序博客网 时间:2024/04/28 21:15

餐饮无线点菜机:

客户端程序与接口程序通过收发windows消息和读写文本文件这两种方式进行交互。过程如下:
1.消息发送方将消息的内容写入到指定的文件。
2.消息发送方通过Windows消息通知消息接收方接受消息。
3.当消息接收方收到windows消息后,读取指定的文件以获取消息的内容。
发送windows消息需要用到下面两个WindowsAPI:
BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);(In user32.dll)
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);(In user32.dll)
为了向指定程序发送windows消息,需要获取指定程序的句柄(PostMessage和SendMessage的第一个参数)。
接口程序由客户端程序启动,因此可以在启动过程中将客户端程序的句柄当做参数传给接口程序,启动接口程序需要用到下面的WindowsAPI:
HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd); (In shell32.dll)
接口程序启动后,再将自己的句柄通过Windows消息发送给客户端程序。
客户端程序可以通过向接口程序发送关闭消息将其关闭


点菜机供应商提供的接口是windows消息+文本文件,所以程序中会对接受消息进行处理,和对文本文件进行解析.对于Windows消息,采用UDP接受,供应商修改接口程序。

因为java Swing不支持windows消息机制,后来因为公司开发一个来电显示软件,发现swt中可以支持windows消息机制。不过对于修改为UDP消息通知,对于供应商和公司开发

问题都不是很大。目前公司支持多种供应商。因为多种供应商的处理机制都是一样。只是对于消息的格式可能存在差异。对于长度,位置,字段的多少。对于消息的格式不同。可

以封装接口。让不同的消息解析交个不同的接口处理。无线点菜机客户端程序概要图如下>


<1>BackWorker 后台监听,当监听到消息就交个IController处理

<2>IController是负责整个处理过程:

通过IRead接口读取文本文件,考虑以后可能读取的位置或者方式不同,或者不同的消息应该使用不同的IRead 其实现在暂时也没有发现这样的扩展。不过在此地方设置

成IRead接口,也不是属于过渡设计。


通过ParserMessage解析请求String到在整个IController处理过程中都作为信息传递的visitorModel中的requestBean.通过commandKey寻找请求消息文件规则XML

(其实此处的解析都是通过ParserMessage解析请求,实际上更好的做法是分析请求消息,将不同的请求消息格式交给不同的类来处理,

在开发一个供应商的时候,不会有这样的感受,两个供应商的时候也不会有很多的感觉,三个供应商等等的时候,因为供应商的命令总是有小许的差别,当供应商增加过多的时

候,为了程序的可读性,可维护性,可修改行。还是应该提出接口,这样也清晰,同理解析响应的时候也是如此)

独立为接口,接口封装请求命令的格式)


ICommand处理请求,不用过多解释


ParserMessage将VisitorModel中的responseBean解析为字符串,通过commandKey寻找响应消息文件规则XML,


IWriter将responseBean写入文件,此处的IWriter接口的提取,在实际多个供应商的时候,就派上用场,因为可能对于同一个命令,不同的供应商写入文件的要求不同,

比如大小的替换。


原创粉丝点击