eSEAT/WebAdaptor.py
HTTPの通信用のアダプタクラスおよび関連関数を定義したファイル
SocketPortクラス
このクラスは、汎用のRaw TCP Socket 通信用のクラスです。
- Class ''SocketPort''(threading.Thred)
-
__init__(owner, name, host, port)
コンストラクタ。デフォルトではクライアントモードで生成される
- setHost(hostname)self.hostへhostnameをセットする
- setPort(port_no)self.portへport_noをセットする
- setClientMode()クライアントモードへ変更する
- setServerMode()サーバーモードへ変更する
- setServer(srv)self.server_adaptorへsrvをセットする
- getParser()self.reader.parser を返す
- bind()低レベルsocketを生成し、self.host, self.port でsocketに名前をつける(サーバーモード)
- connect(acync=True)低レベルsocketを生成し、self.host, self.portのTCPソケットへ接続し、acyncが真の時にはreadスレッドを開始する(クライアントモード)
- wait_for_read(timeout=0.1)selectシステムコールをつかってself.socketが読込可能状態まで待つ
- receive_data(bufsize=4096, timeout=1.0)self.socketが読込可能状態であれば、4096バイトを最大としデータの読み込みを行う。データがtimeoutまで来なかった場合には、Noneを返す
- start()self.mainloopを真にセットし、スレッドを開始する
- run()送受信スレッドの実行。クライアントモードの場合には、message_receiver関数、サーバーモードの場合には、accept_service_loop関数を呼び出す
- remove_service(adaptor)self.serviceからadaptorを除去する
- accept_service_loop()このクラスでは何もしない。子クラスで実装すること。
- message_receiver()receive_data関数でデータを受信し、受信データがあれば、self.reader.parse(data)を呼び出す
- close_service()self.serviceに格納されたサービスにtermiate関数を呼び出し、すべて終了させる。
- close()登録されているサービス(self.service)を終了しsocketを閉じる
- terminate()送受信スレッドの終了
- send(message,name=None)データ(message)の送信
-
__init__(owner, name, host, port)
WebSocketServerクラス
Webサーバーのクラス
- Class ''WebSocketServer''(SocketPort)
-
__init__(reader, name, host, port, index=None)
コンストラクタ。サーバーモードで生成する。
- accept_service(flag=True)外部接続の要求に対してSocketServiceのインスタンスを生成し、スレッドを実行する
- accept_service_loop(lno=5, timeout=1.0)スレッド実行時のメインループ。lnoの数だけlistenで待ち受け、外部から接続要求がきたらaccept_serviceを呼び出す。
- getServer()自分自身を返す。この関数は、serviceからコールされる。
- addKey(key)self.service_keysにkeyを追加する
- isInKey(key)self.service_keysにkeyが存在するかどうかを確認する
- appendWhiteList(addr)self.host_listにaddrを使いする
- removeWhiteList(addr)self.host_listからaddrを削除する
- isInWhiteList(addr)self.host_listか**CometReaderクラスらaddrが存在するかどうかを確認する
- run()スレッド実行のメイン関数、accept_service_loop関数を呼び出す
- remove_service(adaptor)self.serviceからadaptorを削除する
- getCometManager()self.cometManagerを返す
- pushMessage(msg)現在の時刻とmsgを既に登録されてるcomet接続に対して一斉送信する
- send(name, msg, encoding=None)pushMessage関数を呼び出す。(eSEATからコールされる)
-
__init__(reader, name, host, port, index=None)
SocketServiceクラス
WebSocketAdaptorのサービスを定義したクラス。WebSocketAdaptorのaccept_service関数内でインスタンスが生成される
- Class ''SocketService''(SocketPort)
-
__init__(server, reader, name, sock, addr)
コンストラクタ。インスタンス生成時に、server.serviceに自信を追加する
- run()スレッド実行のメイン関数。message_recever関数を呼び出す。
- getServer()self.server_adaptorを返す
-
__init__(server, reader, name, sock, addr)
CommReaderクラス
SocketSeriveなどのsocketから受信されたデータを処理するReaderの基底クラスです。
- Class ''CommReader''()
-
__init__(owner=None, parser=None)
コンストラクタ
- parse(data)message_receiver関数から呼び出され、受信データを処理するための関数、内部では、appendBuffer, checkBufferを呼び出している
- setOwner(owner)self.owenrにownerをセットする
- getServer()self.owenr.getServer関数を呼び出し、その結果を返す
- getIndexName()self.getServer().indexfileを返す
- setBuffer(buff)self.buffer にbuffをセットし、self.current=0にする
- appendBuffer(buff)sel.bufferにbuffを追加し、self.bufsizeを更新する
- skipBuffer(n=4, flag=1)self.currentにnを加算し、flagが真であれば、self.bufferの先頭からnバイト削除し、self.current=0とする
- clearBuffer(n=0)nが正の場合には、self.bufferの先頭からnバイト削除し、self.current=0とする。それ以外の場合には、self.buffer を空にする
- checkBuffer()self.parser.checkMessageを呼び出し受信データを処理する
- send(flag=False)self.owner.send(self.response)を呼び出し、結果を返す。flagが真の時には、送信後self.owner.close関数を呼び出す。
- sendResponse(res, flag=True)self.responseにresを代入し、結果を返す
- close()self.owner.close関数を呼び出す。
- setResponse(msg)self.responseにmsgを追加する
- clearResponse()self.responseをクリアする
- read(nBytes, delFlag=1)self.bufferから self.currentからnBytesのデータを抽出する。delFlag=1のときには、抽出した分のデータをself.bufferから削除する
- getParser()self.parserを返す。
-
__init__(owner=None, parser=None)
CometReaderクラス
- Class ''CometReader''(CommReader)
-
__init__(rtc=None,dirname=None)
コンストラクタ
- getRtc()self.rtcを返す
- doProcess(header, data)WebSocketAdaptorの中心となるデータ処理部
- cometRequest(data, force=1)POSTリクエスト '/comet_request' に対応する処理
- cometTrigger(data)POSTリクエスト '/comet_event' に対応する処理
- registerHandler(data, force=False)cometRequest関数から呼ばれるリクエストの登録処理
- callHandler(data)cometTrigger関数から呼ばれるリクエストの削除処理
-
__init__(rtc=None,dirname=None)
CommParserクラス
Readerの中の格納されたバッファを処理するクラス(基底クラス)
- Class ''CommParser''()
-
__init__(buffer, rdr=None)
コンストラクタ*HttpCommandクラス
- setBuffer(buffer)self.bufferにbufferをセット
- clearBuffer()self.bufferを空にする
- appendBuffer(buffer)self.bufferの末尾にbufferを追加
- skipBufer()現在のところ何もしない
- checkMessage(buffer, offset=0, reader=None)現在のところ何もしない
-
__init__(buffer, rdr=None)
HttpCommandクラス
HTTPのプロトコル解析を行うクラス
- Class ''HttpCommand''(CommParser)
-
__init__(dirname=".", buffer="", rdr=None)
コンストラクタ
- setRootDir(dirname)HTMLドキュメントのルートディレクトリをdirnameに設定する
- checkMessage(buffer, offset=0, reader=None)self.parseHttpHeader関数でHTTPのリクエストが正常に受信できれば、reader.doProcess関数でデータ処理を行う
- parseHttpHeader(buffer, offset=0)受信データを解析し、HTTPのヘッダー部分とデータ部分を抽出する
- parseHeader(header)parseHttpHeader関数から呼ばれ、HTTPヘッダー部を配列に変換する
- response200(ctype, contents)レスポンス200の送信
- response404()レスポンス404の送信
- response400()レスポンス400の送信
-
__init__(dirname=".", buffer="", rdr=None)
CometManagerクラス
Cometのリクエストを管理するクラス。
- Class ''CometManager''()
-
__init__(server)
コンストラクタ
- register(reader, id)Cometリクエストの登録(現在未使用)
- registerHandler(reader, id, data, force=False)Cometリクエストの登録
- closeHandler(id)登録されているCometリクエストを終了させる
- callHandler(id, data)登録されているCometリクエストにdataを送信する(response関数またはresponse_all関数をコールする)
- resoponse(id, json_data, ctype="application/json")idに対応するCometリクエストにjson_dataを送信する
- resoponse_all(json_data, ctype="application/json")登録されているすべてのCometリクエストにjson_dataを送信する
-
__init__(server)
その他の関数
- get_file_contents(fname, dirname=".")
- dirnameの下fnameというファイルの内容を取得する
- get_content_type(fname)
- fnameの拡張子に応じたcontent-typeを返す
- parseQueryString(data)
- HTTPのQuery文字れるを解釈し、Dict形式に変換する
- convertVars(data)
- jsonDump関数から呼び出されるJSON形式の文字列の変換補助
- jsonDump(data)
- dataをJSON形式の文字列に変換する
- create_httpd(port_no=80, top="html")
- HTTPサーバーの生成