MiniGUI - 简单请求与应答处理

MiniGUI-Processes 采用 UNIX Domain Socket 实现客户程序和服务器程序之间的交互
Processes版本是支持客户服务器(C/S)方式的多进程系统,在运行过程中有且仅有一个服务器程序在运行,它的全局变量 mgServer被设为TRUE,其余的MiniGUI应用程序为客户,mgServer变量被设为FALSE。
 

struct _REQUEST

{
    int id;
    const void* data;
    size_t len_data;
}
发送给MiniGUI-Lite服务器的请求
 
int ClientRequest (PREQUEST request, void* result, int len_rslt);
客户在初始化 REQUEST 结构之后,就可以调用 ClientRequest向服务器发送请求,并等待服务器的应答。
 
int GUIAPI ServerSendReply (int clifd, const void* reply, int len);
服务器程序(即 mginit)会在自己的消息循环当中获得来自客户的请求,并进行处理,最终会将处理结果发送给客户。服务器能够调用 ServerSendReply将结果发送给客户。
 
 
MiniGUI -Processes 利用上述这种简单的通讯方法,实现了若干系统级的通讯任务:
  • 鼠标光标的管理。鼠标光标是一个全局资源,当客户需要创建或者销毁鼠标光标,改变鼠标光标的形状、位置,显 示或者隐藏鼠标时,就发送请求到服务器,服务器程序完成相应任务并将结果发送给客户。 
  • 层管理。当客户查询层的信息,新建层,加入某个已有层,或者删除层时,通过该接口发送请求到服务器。 
  • 窗口管理。当客户创建、销毁或者移动主窗口时,通过该接口发送请求到服务器。 
  • 其他一些系统级的任务。比如在新的 GDI 接口中,服务器程序统一管理显示卡中可能用来建立内存 DC 的显示内 存,当客户要申请建立在显示内存中的内存 DC 时,就会发送请求到服务器。
定制的请求处理函数
#define MAX_SYS_REQID     0x0014
#define MAX_REQID             0x0020
MAX_REQID 是能够注册的最大请求 ID 号,而 MAX_SYS_REQID 是系统内部使用的最大的请求 ID 号,也就是说,通过RegisterRequestHandler 注册的请求 ID 号,必须大于 MAX_SYS_REQID 而小于或等于 MAX_REQID。

typedef int (* REQ_HANDLER) (int cli, int clifd, void* buff, size_t len);
BOOL GUIAPI RegisterRequestHandler (int req_id, REQ_HANDLER your_handler);
REQ_HANDLER GUIAPI GetRequestHandler (int req_id);
 
 
 
 
 
 
posted @ 2014-03-20 13:49  paullam  阅读(611)  评论(0编辑  收藏  举报