Board logo

标题: XIM协议的原理 [打印本页]

作者: look_w    时间: 2018-4-15 18:04     标题: XIM协议的原理

引言1.输入法世界上大多数语言是基于字母表的,一些字母的集合组成了单词,当在计算机中输入这些语言时,用户通常是在键盘上键入相应的字符或一些组合键来实现。但表意文字(如中,日,韩等)却不能在键盘上找到相应的键,如果想在计算机中输入这些文字,就需要相应的输入法。输入法有很多种,如拼音,五笔等,但这些输入法的一个共同的特征是用户敲多个键来组成一个文字(或一组文字),统称为编码输入。
2.XIM协议XIM(X Input Method)是X-Window系统下的符合国际化标准的输入法协议,只要应用程序和系统都支持这种输入协议,应用程序就不必具体考虑在不同语言环境下的输入问题,系统可以根据相应的locale去寻找相应的输入法,从而达到国际化的要求。
XIM的原理1.体系结构2.简单协议处理模型下图2是一个最简单的协议流的例子:        

当应用程序发生按键事件时,它调用Xlib API的XNextEvent函数,对于后端输入法模型,事件都由IM库来处理,IM库先发出XIM_FORWARD_EVENT作为同步请求,IM服务器接收到此协议后发出XIM_FORWARD_EVENT或XIM_COMMIT作为同步应答,双方完成同步。然后,IM服务器阻塞从IM库接收到的XIM_FORWARD_EVENT消息,进行处理,结束后把结果返回到应用程序。
XIM开发工具IMdkit简介IMdkit(IMServer Develops Kit)是X11R6的Xi18n执行工作组发布的XIM服务器开发工具,它提供了一个低级的C语言接口,把每个IM协议操作都绑定到了简单的C语言接口,这样用户就可以很容易的使你的IM服务器与XIM客户程序很容易的通讯,而不用直接处理复杂的IM协议。XIM客户程序是指利用在X11R6中定义的XIM API国际化过的应用程序。IMdkit封装了实际的IM协议操作,这样用户自己就不必处理实际包,可以利用它提供的数据结构,简化了许多细节麻烦;封装了不同的传输机制(包括X协议,TCP/IP,DECNET),这些协议用来在IM库和IM服务器之间传输数据包;封装了多种IM协议模型,包括Ximp和Xi18n。
IMdkit定义了一个不透明的数据结构XIMS,用来抽象输入法服务器的结构。它由函数IMOpenIM返回,函数IMOpenIM如果成功的话,返回一个XIMS结构,否则返回NULL。
对于每一个XIM协议输入,在IMdkit的头文件中都定义了一些相应的结构,对于R6标准的IM协议模型,中定义了所有的IM协议结构。
1)IM协议的通用数据结构
在R6的标准IM协议模型中,所有的事件结构有如下的通用成员:
1
2
3
4
5
typedef struct{
int major_code;
int minor_code;
CARD16  connect_id;
}




major_code和minor_code指定了唯一鉴别这个IM协议类型本身的常量名。connect_id指定了连接的客户ID。
2)协议处理
一些由IM库发送的IM协议请求由IMdkit内部处理了,不需要发送到IM服务器。因为IMdkit会根据你在XIMS结构中设置的值来决定对这个IM协议请求的应答。需要处理的一些IM协议请求参看下面介绍的XIM的实现。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0