2011年7月1日金曜日

07.Working with messages

「メッセージ」は、ProtoRPCで、クライアントアプリケーションと、
サーバーがやりとりをするためのデータ型です。

「メッセージ」は、「Message」(protorpc.messages.Message)を継承したクラスとして定義します。
データフィールドはクラスの属性に相当します。

例として、ゲストブックアプリケーションでは、ユーザーはノートの投稿ができます。
そのノートを表現するメッセージを作ってみましょう。


from protorpc import messages
class Note(messages.Message):
  text = messages.StringField(1, required=True)
  when = messages.IntegerField(2)

このノートメッセージは、「text」と「when」という、2つのフィールドを持ちます。
それぞれのフィールドは型を持ちます。
textフィールドは文字列(ユニコード文字列)であり、ユーザーがゲストブックに投稿した文章を表します。
whenフィールドは整数であり、ノートが投稿された際のタイムスタンプを表します。

それぞれのフィールドは、一意の数値を持ちます。
(フィールド定義の最初の引数のことです。ノートメッセージの場合、「text」が1で、「when」が2です。)
この数値は、データをネットワークに流す際に、フィールドの識別子として利用されます。
(名前は識別子として使用しません。)

フィールドの値は、Noteクラスのコンストラクタでセットできます。
import time
note_instance = Note(text=u’Hello guestbook!’,
                     when=int(time.time())


これらのフィールドは、通常のPythonクラスの属性と同様に読み書きできます。
例えば、

print note_instance.text
note_instance.text = u‘Good-bye guestbook!’
print note_instance.text

とした場合、この出力は以下のようになります。

Hello guestbook!
Good-bye guestbook!

フィールドは、値の設定を必須にすることも、しないこともできます。
デフォルトは必須ではありませんが、フィールド定義に「required=True」を追加することで、必須になります。

メッセージのインスタンスが初期化済みである、と見なされるためには、必須フィールドが設定されている必要があります。
そして、ProtoRPCサービスは、初期化済みであるとみなされたメッセージのみ、受け取ることができます。

0 件のコメント:

コメントを投稿