ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今回はOmniORBpyの簡単なプログラムを作ってみます。
ここから簡単な例をダウンロードできます。
とは言ってもこのページのコードをパクッただけですが。
以前C++で作ったもののPython版なのでやっていることはほぼ同じです。
まず、IDLファイルのコンパイルを行います。
example_echo.idlと同じフォルダに移動して以下のコマンドを入力してください。
omniidl -bpython -Wba -nf example_echo.idl
するとExampleフォルダ、Example__POAフォルダ、example_echo_idl.pyが生成されます。
まずはクライアントから見ていきます。
こんな感じです。
次にサーバーです。
と言う感じです。
では動作確認をしてみます。
ネームサーバーを立ち上げるには以下のコマンドを入力します。
omniNames -start -logdir tmp
次にサーバーを起動します。
pythonTestCORBAserver.py -ORBInitRef NameService=corbaloc:iiop:1.0@localhost:2809/NameService
と入力してください。
最後にクライアントを起動します。
python TestCORBAclient.py -ORBInitRef NameService=corbaloc:iiop:1.0@localhost:2809/NameService
と入力してサーバー側のコンソールで文字列が表示されたら成功です。
今日はこれぐらいにしておきます。
次回と言いたいのですがネタがありません。
とりあえずRTCのプログラミングの話はやめてマニュアルの書き方でも考えてみるか。
というか本来そういうことを書きたいはずなのですが、何故か方向性が狂ってしまいました。
しばらくはRTCのプログラミングに関する話はやめます。あまり人の役にも立っていないみたいですし、特にやる意味も感じません。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
ここから簡単な例をダウンロードできます。
とは言ってもこのページのコードをパクッただけですが。
以前C++で作ったもののPython版なのでやっていることはほぼ同じです。
まず、IDLファイルのコンパイルを行います。
example_echo.idlと同じフォルダに移動して以下のコマンドを入力してください。
omniidl -bpython -Wba -nf example_echo.idl
するとExampleフォルダ、Example__POAフォルダ、example_echo_idl.pyが生成されます。
まずはクライアントから見ていきます。
#!/usr/bin/env python
import sys
from omniORB import CORBA
import CosNaming, Example
# ORBの生成と初期化
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
# RootPOA(ツリー構造のルート)への参照を取得
obj = orb.resolve_initial_references("NameService")
#ルートコンテキストを取得
#ルートコンテキストを取得
rootContext = obj._narrow(CosNaming.NamingContext)
if rootContext is None:
print "Failed to narrow the root naming context"
sys.exit(1)
name = [CosNaming.NameComponent("test", "my_context"),
CosNaming.NameComponent("ExampleEcho", "Object")]
try:
#指定した名前のオブジェクトリファレンスを取得
#指定した名前のオブジェクトリファレンスを取得
obj = rootContext.resolve(name)
except CosNaming.NamingContext.NotFound, ex:
print "Name not found"
sys.exit(1)
#サーバントのオブジェクトリファレンス取得
eo = obj._narrow(Example.Echo)
if (eo is None):
print "Object reference is not an Example::Echo"
sys.exit(1)
message = "Hello from Python"
#サーバーに処理を要求
#サーバーに処理を要求
result = eo.echoString(message)
print "I said '%s'. The object said '%s'." % (message,result)
こんな感じです。
次にサーバーです。
#!/usr/bin/env python
import sys
from omniORB import CORBA, PortableServer
import CosNaming, Example, Example__POA
class Echo_i (Example__POA.Echo):
def echoString(self, mesg):
print "echoString() called with message:", mesg
return mesg
# ORBの生成と初期化
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
poa = orb.resolve_initial_references("RootPOA")
ei = Echo_i()
eo = ei._this()
# RootPOA(ツリー構造のルート)への参照を取得
obj = orb.resolve_initial_references("NameService")
#ルートコンテキストを取得
#ルートコンテキストを取得
rootContext = obj._narrow(CosNaming.NamingContext)
if rootContext is None:
print "Failed to narrow the root naming context"
sys.exit(1)
name = [CosNaming.NameComponent("test", "my_context")]
try:
#ネーミングコンテキストの作成
#ネーミングコンテキストの作成
testContext = rootContext.bind_new_context(name)
print "New test context bound"
except CosNaming.NamingContext.AlreadyBound, ex:
print "Test context already exists"
obj = rootContext.resolve(name)
testContext = obj._narrow(CosNaming.NamingContext)
if testContext is None:
print "test.mycontext exists but is not a NamingContext"
sys.exit(1)
name = [CosNaming.NameComponent("ExampleEcho", "Object")]
try:
#オブジェクトを登録
#オブジェクトを登録
testContext.bind(name, eo)
print "New ExampleEcho object bound"
except CosNaming.NamingContext.AlreadyBound:
testContext.rebind(name, eo)
print "ExampleEcho binding already existed -- rebound"
#POAManagerオブジェクトの取得とアクティブ状態への遷移
poaManager = poa._get_the_POAManager()
poaManager.activate()
#ORBの破棄
orb.run()
と言う感じです。
では動作確認をしてみます。
ネームサーバーを立ち上げるには以下のコマンドを入力します。
omniNames -start -logdir tmp
次にサーバーを起動します。
pythonTestCORBAserver.py -ORBInitRef NameService=corbaloc:iiop:1.0@localhost:2809/NameService
と入力してください。
最後にクライアントを起動します。
python TestCORBAclient.py -ORBInitRef NameService=corbaloc:iiop:1.0@localhost:2809/NameService
と入力してサーバー側のコンソールで文字列が表示されたら成功です。
今日はこれぐらいにしておきます。
次回と言いたいのですがネタがありません。
とりあえずRTCのプログラミングの話はやめてマニュアルの書き方でも考えてみるか。
というか本来そういうことを書きたいはずなのですが、何故か方向性が狂ってしまいました。
しばらくはRTCのプログラミングに関する話はやめます。あまり人の役にも立っていないみたいですし、特にやる意味も感じません。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする