Top Banner
本資料に記載の情報や画像などのコンテンツに対する著作権・知的財産権 は、株式会社CRI・ミドルウェアに帰属します。また、当社以外の会社名や製 品名は、それぞれ各社の登録商標または商標です。 各種コンテンツの無断転載・再配布は禁止します。 株式会社CRI・ミドルウェア 花房 宏通 ネットワークコマンド入力に対応したツール事例
20

ネットワークコマンド入力に対応したツール事例

Jul 12, 2015

Download

Education

fumoto kazuhiro
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ネットワークコマンド入力に対応したツール事例

本資料に記載の情報や画像などのコンテンツに対する著作権・知的財産権は、株式会社CRI・ミドルウェアに帰属します。また、当社以外の会社名や製品名は、それぞれ各社の登録商標または商標です。 各種コンテンツの無断転載・再配布は禁止します。

株式会社CRI・ミドルウェア

花房 宏通

ネットワークコマンド入力に対応したツール事例

Page 2: ネットワークコマンド入力に対応したツール事例

アジェンダ

• パイプラインに組み込むツール開発について

• ネットワークの活用と事例

– ネットワークの活用

– デモ

– 実装例

– メリットとデメリット

• おまけ

– コード例

PAGE 2

Page 3: ネットワークコマンド入力に対応したツール事例

パイプラインに組み込むツール開発について

• コンテンツ開発パイプラインで登場するツール

– DCCツール

• エクスポータ、データ作成補助など

– コンバータ

– ビューア

– データ管理

PAGE 3

Page 4: ネットワークコマンド入力に対応したツール事例

パイプラインに組み込むツール開発について

• どうせツールを作るなら、パイプラインに組み込みやすいように作るべき

– システムの部品としても使うことを想定する

PAGE 4

Page 5: ネットワークコマンド入力に対応したツール事例

パイプラインに組み込みやすいツール

• いろんな事ができるツールよりは、シンプルな機能として固まってるツールの方が使いやすい

– 画像変換、ファイル操作、テキストフィルタなど

• 簡単な機能でも、ツールとしてまとまることで、使いまわしやすくなる

– 同じものを何度も作らなくて済む

PAGE 5

Page 6: ネットワークコマンド入力に対応したツール事例

パイプラインに組み込みやすいツール

• GUIツールはパイプラインに組み込むのが大変

– 規模が大きくなりがち

– 操作手順(ルール)が複雑

– 自動化しにくい

• これらの問題を解決するために、ネットワークを活用しようというのが本セッションの本題

PAGE 6

Page 7: ネットワークコマンド入力に対応したツール事例

ネットワークの活用

• ネットワークというと敷居が高そうだけど…

– とりあえずローカル限定での通信から始めてみる

– .NET frameworkやPythonなどは、比較的簡単にネットワーク機能(Socket)が使える • 相手にコマンド投げるくらいなら

– 通信部分だけプログラマにまかせてもOK

• 今回のテーマで言うネットワークの使用用途

– あくまでツールにアクセスする1手段

– マシン同士の通信ではなく、プロセス間通信が目的

PAGE 7

Page 8: ネットワークコマンド入力に対応したツール事例

ネットワークの活用

• 要は、ツールを外から制御したい

– ネットワークからのコマンドにより、機能操作を行う

– ツールの機能をコマンドの形でまとめ、外部からコマンドを受信できる形にする

PAGE 8

Page 9: ネットワークコマンド入力に対応したツール事例

デモ

PAGE 9

Page 10: ネットワークコマンド入力に対応したツール事例

GT2 SimpleViewer実装

• コマンドの種類

– 各種アセットのロード

– アニメーション制御

– 各種表示物の制御

– ツール制御

• サイズ変更やシャットダウン等

PAGE 10

Page 11: ネットワークコマンド入力に対応したツール事例

GT2 SimpleViewer実装

• コマンドの書式

– 「命令」と「値」を文字列で渡す

• 例:GMD=D:¥sample.gmd

→sample.gmdファイルをロードする

– 文字列なので、ユーザーが扱いやすい

– 仕様追加もしやすい

PAGE 11

Page 12: ネットワークコマンド入力に対応したツール事例

GT2 SimpleViewer実装

• ツール内部のコマンドサーバーがコマンドを解釈し、レンダリング等の内部処理を行う

PAGE12

Page 13: ネットワークコマンド入力に対応したツール事例

GT2 SimpleViewer実装

• コマンドサーバーの仕組み

PAGE 13

Page 14: ネットワークコマンド入力に対応したツール事例

メリットとデメリット

• メリット – UIと機能を分離できる

• UIのカスタマイズがしやすい

• 分離したものを、1つのツールとして見せるのも、別々のツールとするのも自由

– Socketに対応してさえいれば、ツールや言語、プラットフォームを問わず利用できる • いろんなツールやスクリプトからツールにアクセスできる。

• バッチやスクリプトで、その場的なツールを気軽に作れる

– あるデータの組み合わせでシーンを作って、連番画像として出力するツールとか

PAGE 14

Page 15: ネットワークコマンド入力に対応したツール事例

メリットとデメリット

• デメリット

– なんだかんだ言って、作りこんでいくと大変

• 同期とか

• 通信の確立(ハンドシェイクとか)

• 接続が切れたら?

– デバッグも結構大変

PAGE 15

Page 16: ネットワークコマンド入力に対応したツール事例

おまけ

• コマンドを送るPythonコード例 # ソケット作成(TCP)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.settimeout(1)

for i in range(10):

try:

# 接続(HOST=IPアドレス or ホスト名, CONNECT_PORT=ポート番号)

sock.connect((HOST, CONNECT_PORT))

return sock

except socket.error, e:

time.sleep(1)

~~~~~~~~~~~~~~~~

# 送信(message=文字列)

sock.send(message)

PAGE 16

Page 17: ネットワークコマンド入力に対応したツール事例

おまけ

• C#(.NET framework)の受信コード例 // 接続待ち準備

IPAddress addr = IPAddress.Parse("127.0.0.1");

var listener = new TcpListener(addr, CONNECT_PORT);

listener.Start(1);

listener.BeginAcceptTcpClient(new AsyncCallback(Accept), listener);

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// 接続許可

void Accept(IAsyncResult ar)

{

var listener = ar.AsyncState as TcpListener;

if (listener != null)

{

this.networkClient = listener.EndAcceptTcpClient(ar);

this.commandStream = networkClient.GetStream();

}

}

PAGE 17

Page 18: ネットワークコマンド入力に対応したツール事例

おまけ

• C#(.NET framework)の受信コード例 if (this.commandStream.DataAvailable == true)

{

byte[] receive_data = new byte[4096];

// 受信

Int32 size = this.commandStream.Read(receive_data, 0, 4096);

// 受信したデータ処理

~~~~~~~~~~~~~~~~~~~~~~~

}

PAGE 18

Page 19: ネットワークコマンド入力に対応したツール事例

まとめ

• パイプラインに組み込む事を前提にしたツール開発を行いましょう

– シンプルでコンパクトなものは組み込みやすい

• ツールにネットワーク経由で制御できる機能を持たせると、いろいろ便利

– UIの幅が広がる

• 言語や環境の枠を超えたツールの制御が可能になる

– 自動化しやすくなる

PAGE 19

Page 20: ネットワークコマンド入力に対応したツール事例

ご清聴ありがとうございました

PAGE 20