microwindows代码分析 (一)c/s模型的简化

转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepp

作者联系方式:YU TAO <yut616 at sohu dot com>

microwindows代码分析 (一)c/s模型的简化

在microwin的运行模式中,nano-x通常的使用方式是c/s模型的,这是类似于x-windows的方式的,好处是某个client端的异常不会影响到server对其他client提供的服务。

但是在很多嵌入式系统中,通常都是在一个单一的环境中使用,单独的server服务进程就不是那么必要。

为了避免在后台启动一个nano-x的服务进程,可以修改microwin的src/config:

其中改为:

LINK_APP_INTO_SERVER     = Y

我们来看看这个标记对代码的影响:

1、nanox/Makefile
# Nano-X server files
NANOXFILES = srvmain.o srvfunc.o srvutil.o srvevent.o srvclip.o
# Nano-X client files
OBJS = nxdraw.o nxutil.o nxtransform.o
ifeq ($(LINK_APP_INTO_SERVER), Y)
OBJS += $(NANOXFILES)
else
# Nano-X server files (network only)
NANOXFILES += srvnet.o
# Nano-X client files (network only)
OBJS += client.o nxproto.o error.o
ifeq ($(FRAMEBUFFER), Y)
OBJS += clientfb.o
else
ifeq ($(X11), Y)
OBJS += clientfb.o
endif
endif
这里说明,有了这个标记,那么就只会增加srv对应的代码,而client的代码被排除在外了。

2、Makefile.rules
ifeq ($(LINK_APP_INTO_SERVER), Y)
DEFINES += -DNONETWORK=1
endif


如果这个标记为N的话,那么当你的应用程序使用编译出来的nano-x库时,使用的将是microwindows-0.90/src/nanox/client.c的代码,即GrOpen是会尝试与srv建立连接:

ret = connect(nxSocket, (struct sockaddr *) &name, size);

并发送request给srv:

nxWriteSocket((char *)&req,sizeof(req));

而如果这个标记为Y的话,那么你的应用使用的代码GrOpen是nanox/srvmain.c中的,即直接运行srv的代码,其中就有初始化graphics的内容GsInitialize()。

这样就实现了对microwin的c/s模型的一个简化,这样更加适合于在嵌入系统中来使用和调试。

由于microwin在x11下,可以先对你的应用程序做好调试后,再转到嵌入系统中,所以我们可以先在x11下验证基本的代码功能,加快开发和调试的速度。

这里记录一下实验用的x11下的config中的一些标记:

ARCH                     = LINUX-NATIVE 
MICROWIN                 = N 
NANOX                    = Y 
SHAREDLIBS               = N 
NANOWM                   = N 
SCREEN_PIXTYPE           = MWPF_TRUECOLOR8888 
X11                      = Y 
NOMOUSE                  = Y 
NOKBD                    = Y 
HAVE_FREETYPE_SUPPORT=N 



 

你可能感兴趣的:(struct,server,嵌入式,NetWork,代码分析)