python寫的一個omniORB的調用用例

當初項目選型時,在Ice,Net Remoting,omniORB徘徊許久,最終還是選用了Ice。這是omniORB的一個簡單用例。


idl接口描述

module messenger
{
  interface SecretMessage
  {
    string get_message();
  };
};


服務端實現:

#coding=utf-8
import messenger, messenger__POA
#定義業務服務對象
class OurSecretMessage(messenger__POA.SecretMessage):
    def __init__(self, secret_message):
        self.secret_message = secret_message
    def get_message(self):
        lst=[]
        for i in range(1000):
            lst.append("this is %d"%(i+1))
        return ",".join(lst)
#初始化業務服務對象實例
ourMessage =OurSecretMessage("Hello,omniORBpy!")
#初始化ORA POA POA_MANAGER對象
import sys
from omniORB import CORBA
sys.argv.extend(("-ORBInitRef","NameService=corbaname::localhost"))
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
poa = orb.resolve_initial_references("RootPOA")
poa_manager = poa._get_the_POAManager()
poa_manager.activate()
#
import CosNaming
name_service_obj=orb.resolve_initial_references("NameService")
name_service_root=name_service_obj._narrow(CosNaming.NamingContext)
message_obj=ourMessage._this()
#將對象飲用字符串IOR寫入message.ior文件
#output_handle = open("message.ior","w")
#string_ior = orb.object_to_string(message_obj)
#output_handle.write(string_ior)
#output_handle.close()
#將對象綁定到邏輯名稱Messenger.SecretMessage
message_name=[CosNaming.NameComponent("Messenger","SecretMessage")]
name_service_root.bind(message_name,message_obj)
print "server is run..."
orb.run()

 


客戶端實現:

#coding=utf-8
import sys
from omniORB import CORBA
import CosNaming
import messenger
#
#input_handle = open("message.ior","r")
#ior = input_handle.read()
#input_handle.close()
#orb = CORBA.ORB_init(sys.argv,CORBA.ORB_ID)
#
#obj = orb.string_to_object(ior)
#mo = obj._narrow(messenger.SecretMessage)
#result = mo.get_message()
#print result
#初始化客戶ORB,指定訪問的命名服務器地址
sys.argv.extend(("-ORBInitRef", "NameService=corbaname::localhost"))
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
name_service_obj = orb.resolve_initial_references("NameService")
name_service_root = name_service_obj._narrow(CosNaming.NamingContext)
assert name_service_root is not None, "Failed to narrow to NamingContext."
#獲取命名服務對象,解析服務對象的邏輯名Messenger.SecretMessage
message_name = [CosNaming.NameComponent("Messenger", "SecretMessage")]
message_obj = name_service_root.resolve(message_name)
result = message_obj.get_message()
print result

 

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