eSEAT_WebAdaptor.py
Simple Wiki Based Contents Management System
ソフトウェア関連 >> RTコンポーネント関連 >> eSEAT_v2.5 >> eSEATのファイル構成クラスについて >> eSEAT_WebAdaptor.py

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)の送信

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からコールされる)

SocketServiceクラス

WebSocketAdaptorのサービスを定義したクラス。WebSocketAdaptorのaccept_service関数内でインスタンスが生成される
  • Class SocketService(SocketPort)
    • __init__(server, reader, name, sock, addr)
      コンストラクタ。インスタンス生成時に、server.serviceに自信を追加する
    • run()
      スレッド実行のメイン関数。message_recever関数を呼び出す。
    • getServer()
      self.server_adaptorを返す

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を返す。

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関数から呼ばれるリクエストの削除処理

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)
      現在のところ何もしない

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の送信

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を送信する

その他の関数

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サーバーの生成