服務(wù)器端:
首先是兩個(gè)全局變量:CORBA_ORB和PortableServer_POA
1.創(chuàng)建一個(gè)CORBA_Object 類(lèi)型的變量,一般初始化為CORBA_OBJECT_NIL
2.用來(lái)寫(xiě)入IOR的文件(這個(gè)應(yīng)該是可選的,還有其他的實(shí)現(xiàn)方法)。
3.環(huán)境變量,用來(lái)存儲(chǔ)錯(cuò)誤信息之類(lèi)的。CORBA_Environment,(不知道為什么例子中都是一個(gè)長(zhǎng)度
為一的數(shù)組)。
4.初始化:用命令行傳入的參數(shù),全局變量global_orb和root_poa,以及環(huán)境變量進(jìn)行初始化。(1)PortbaleServer_POAManager
(2)設(shè)置局部CORBA_Environment變量(用于保存錯(cuò)誤信息)
(3)設(shè)置SIGINT和SIGTERM的信號(hào)處理函數(shù)
(4)CORBA_ORB_init.ORB初始化,返回一個(gè)orb.
(5)CORBA_ORB_resolve_initial_references.用ORB返回一個(gè)POA
(6)PortableServer_POA__get_the_POAManager.用POA得到一個(gè)POA_Manager
(7) PortableServer_POAManager_activeate。激活POA_Manager.
(8)CORBA_OBject_release.釋放POA_Manager?
5.激活服務(wù)。
利用已經(jīng)生成好的框架,這里只是簡(jiǎn)單的調(diào)用。impl_X__create.這里X為實(shí)際的類(lèi),poa為參數(shù)。返回一個(gè)類(lèi)的實(shí)例。
6.IOR寫(xiě)入文件,供客戶(hù)端讀取
7.服務(wù)運(yùn)行:
CORBA_ORB_run.主事件循環(huán)。
8.清理工作
(1)PortableServer_POA_reference_to_id
(2)PortableServer_POA_deactivate_object
(3)PortableServer_POA_destroy。銷(xiāo)毀POA
(4)CORBA_free釋放objid
(5)CORBA_Object_release.又一次POA釋放?
(6)CORBA_Object_release.釋放實(shí)際的類(lèi)。
(7)若ORB不空,CORBA_ORB_destroy
客戶(hù)端:client
1.initializes the environment.CORBA_Environment
2.client initialize. init signal handling (SIGINT,SIGTERM).
CORBA_ORB_init(similar to the server)
3.read IOR from the file and translate it a X object
4.run the client.use the method of X to do the real work.
4.do some cleanup.
CORBA_Object_release.
if orb is not NULL,do CORBA_ORB_destroy.
客戶(hù)端的代碼量要比服務(wù)器端的少一些。不過(guò)大致流程都一樣。orbit已經(jīng)為服務(wù)器端生成了很多結(jié)構(gòu)化的代碼。而且,大部分CORBA程序都可以按著這個(gè)流程來(lái),真正的實(shí)現(xiàn)部分并不多,所以熟悉了之后就可以寫(xiě)出很規(guī)范的代碼。