CMPP2.0 SP 端開發設計思路

  1. 我寫在這裏只是想把握的思路記錄在這裏而已,我並不是CMPP SP開發的高手,我只是剛剛入門而已.問題想多了,總是把前面的東西給忘記了,看來記性不是很好啊,所有要把我想的東西給點點滴滴的記錄下來,當然,我的想法也有可能是錯誤的,希望給予批評改進.

應用程序使用的是收發二級緩衝.

  一級緩衝 二級緩衝
接受數據緩衝 把從網絡中接受的數據放在這裏rbuffer 只保留CMPP_DELIVER消息結構的對象.讓應用程序可以讀取手機用戶發送給SP的短信,或ISMG發送給SP的狀態報告,可以使用集合或map類來實現.
發送數據緩衝 把待發送的網絡數據放在這裏sbuffer,通過send函數發送出去 只保存CMPP_SUBMIT消息,主要的作用還是用於獲取MSg_ID和判斷該消息是否發送到用戶的手機上.
  1. Initialize():初始化系統資源函數.這裏的系統資源不單單是操作系統的資源,所指的是應用程序用的到資源,如socket對象,socket事件對象,事件內核對象,消息序號等.
  2. Unitialize():就是釋放系統的資源了,只要釋放操作系統資源和堆內存就可以了,不用多說,一看,什麼時候都會明白.
  3. SocketConnect():由於cmpp通信是建立在TCP/IP的基礎上,所以SP與ISMG進行CMPP消息通信之前必須先建立socket通信.
  4. SocketClose():
  5. SendCmppConnect()發送CMPP_CONNECT消息,登陸ISMG網關了,只有登陸了ISMG網關以後纔可以進行通信的了.
  6. 線程函數:SocketEventProc():socket網絡事件處理函數,調用WSAWaitForMatlipleEvents等待網絡事件的發生,分析網絡事件,如果是FD_READ則讀取網絡數據放在rbuffer中,然後判斷rbuffer中的數據大小,如果rbuffer中的數據長度>=sizeof(消息結構頭),那麼就 通知 CMPP消息處理線程獲取數據,進行相應的處理,然後繼續等待下一個事件的發生.如果是FD_CONNECT則發送登陸網關的消息,FD_CLOSE,......相應的處理.
  7. 線程函數:CMPPDataDisposeProc();處理cmpp數據的. hevet----事件內核對象.調用WaitForSingleObject()函數,等到指定的事件發生,(當事件變爲通知狀態時,說明rbuffer中已有數據可以處理)通過獲取rbuffer中的數據,並轉化位CMPP_HEADER對象,依據cammand_id,進行相應的處理.比較重要的是CMPP_CONNECT,CMPP_SUBMIT_RESP,CMPP_DELIVER,CMPP_ACTICE_TEST.......,着中處理SUBMIT_RESP,DELIVER,對DELIVER的處理:把該消息送入二級緩存,通知(也可以不用,待應用程序自己來獲取)應用程序讀短消息線程來獲取.
  8. CMPP_SUBMIT消息發送線程:該線程視應用程序是否需要.所有的CMPP_SUBMIT消息都要放入二級緩存和已經緩存,一般的   消息只要放入一級緩衝就可以了.然後通知發送winsock數據線程發送數據.
  9. winsock發送數據線程.調用WaitForSingleObject等待發送緩衝區有數據可發送的通知,當收到通知時,把rbuffer的數據發送出去.

   今天就想了這些了,改天有什麼想法在補充.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章