应用程序使用的是收发二级缓冲.
一级缓冲 二级缓冲接受数据缓冲 把从网络中接受的数据放在这里rbuffer 只保留CMPP_DELIVER消息结构的对象.让应用程序可以读取手机用户发送给SP的短信,或ISMG发送给SP的状态报告,可以使用集合或map类来实现.发送数据缓冲 把待发送的网络数据放在这里sbuffer,通过send函数发送出去 只保存CMPP_SUBMIT消息,主要的作用还是用于获取MSg_ID和判断该消息是否发送到用户的手机上.
Initialize():初始化系统资源函数.这里的系统资源不单单是操作系统的资源,所指的是应用程序用的到资源,如socket对象,socket事件对象,事件内核对象,消息序号等.Unitialize():就是释放系统的资源了,只要释放操作系统资源和堆内存就可以了,不用多说,一看,什么时候都会明白.SocketConnect():由于cmpp通信是建立在TCP/IP的基础上,所以SP与ISMG进行CMPP消息通信之前必须先建立socket通信.SocketClose():SendCmppConnect()发送CMPP_CONNECT消息,登陆ISMG网关了,只有登陆了ISMG网关以后才可以进行通信的了.线程函数:SocketEventProc():socket网络事件处理函数,调用WSAWaitForMatlipleEvents等待网络事件的发生,分析网络事件,如果是FD_READ则读取网络数据放在rbuffer中,然后判断rbuffer中的数据大小,如果rbuffer中的数据长度>=sizeof(消息结构头),那么就 通知 CMPP消息处理线程获取数据,进行相应的处理,然后继续等待下一个事件的发生.如果是FD_CONNECT则发送登陆网关的消息,FD_CLOSE,......相应的处理.线程函数:CMPPDataDisposeProc();处理cmpp数据的. hevet----事件内核对象.调用WaitForSingleObject()函数,等到指定的事件发生,(当事件变为通知状态时,说明rbuffer中已有数据可以处理)通过获取rbuffer中的数据,并转化位CMPP_HEADER对象,依据cammand_id,进行相应的处理.比较重要的是CMPP_CONNECT,CMPP_SUBMIT_RESP,CMPP_DELIVER,CMPP_ACTICE_TEST.......,着中处理SUBMIT_RESP,DELIVER,对DELIVER的处理:把该消息送入二级缓存,通知(也可以不用,待应用程序自己来获取)应用程序读短消息线程来获取.CMPP_SUBMIT消息发送线程:该线程视应用程序是否需要.所有的CMPP_SUBMIT消息都要放入二级缓存和已经缓存,一般的 消息只要放入一级缓冲就可以了.然后通知发送winsock数据线程发送数据.winsock发送数据线程.调用WaitForSingleObject等待发送缓冲区有数据可发送的通知,当收到通知时,把rbuffer的数据发送出去.今天就想了这些了,改天有什么想法在补充.
本文地址:http://com.8s8s.com/it/it22849.htm