本文主要是介绍餐饮无线点菜机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
餐饮无线点菜机:
客户端程序与接口程序通过收发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接口的提取,在实际多个供应商的时候,就派上用场,因为可能对于同一个命令,不同的供应商写入文件的要求不同,
比如大小的替换。
这篇关于餐饮无线点菜机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!