以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
また、以下では、携帯電話100を「通信端末」の代表例として説明を行う。ただし、通信端末は、パーソナルコンピュータや、カーナビゲーション装置(Satellite navigation system)や、PND(Personal Navigation Device)や、PDA(Personal Data Assistance)などのような、他の情報通信機器であってもよい。
<チャットルームに関する説明>
本実施の形態では、‘チャット’とは、後述のインターネット500またはキャリア網700を介したオンラインサービスによりリアルタイムに通信端末同士がメッセージをやり取りするような通信を指す。たとえば、メールサーバは介さないIPアドレスを用いたP2P通信、またはメールサーバ経由の電子メール交換であってもよい。
また、チャットルーム(以下、単にルームと略す)は、一般的には、テーマ・話題毎にデータ交換するために開設されて端末によりアクセスされる。本実施の形態では、通信端末において生成されるルームID(identifier)であるルーム名毎に開設される。本実施の形態では、‘ルーム’とは、当該ルームのルーム名に対応して、チャットのためのデータ通信(データ交換)を要求するユーザの識別情報を、すなわちユーザの通信端末の識別情報を相互に関係付けるための情報を指す。この通信端末の識別情報は、各通信端末を一意に識別するための情報であって、本実施の形態では各通信端末に割当されたIPアドレスとしている。
したがって、本実施の形態では、‘ルームの開設’とは、ルームの生成に相当する。具体的には、所定記憶領域に新規にルーム名を格納するとともに、このルーム名に対応して(関連付けて)ルームの生成を要求したユーザの通信端末の識別情報を格納する動作に相当する。
また、‘ルームへの参加’とは、所定記憶領域に既に格納されたルーム名に対応してチャットを要求するユーザの通信端末の識別情報を格納するともに、当該ユーザに対して当該ルームに参加している、すなわち当該ルーム名に対応して格納されている他のユーザの通信端末の識別情報を配信する動作に相当する。
また、‘ルームからの脱退’とは、所定記憶領域に既に格納されたルーム名に対応して格納された通信端末の識別情報を削除するとともに、当該ルームに参加している端末宛てに、すなわち当該ルーム名に対応して格納されている識別情報が指す通信端末宛てに、削除された識別情報を配信する動作に相当する。
また、‘ルームの削除’とは、削除するべきルームのルーム名および対応する通信端末の識別情報を、所定記憶領域から削除するための動作を指す。
<ネットワークシステム1の全体構成>
図1を参照して、本実施の形態に係るネットワークシステム1は、携帯電話100A,100Bおよび100Cと、マッチングサーバ(第1のサーバ装置)400と、メールサーバ(第2のサーバ装置)600と、インターネット(第1のネットワーク)500と、キャリア網(第2のネットワーク)700とを含む。また、本実施の形態に係るネットワークシステム1は、車両250に搭載されるカーナビゲーション装置200と、パーソナルコンピュータ(PC;Personal Computer)300とを含む。
なお、説明の容易化のために、以下では、本実施の形態に係るネットワークシステム1が、第1の携帯電話100Aと、第2の携帯電話100Bと、第3の携帯電話100Cとを含む場合について説明する。また、携帯電話100A,100B,100Cの各々に共通の構成や機能を説明する際には、それらを携帯電話100とも総称する。そして、携帯電話100A,100B,100C、カーナビゲーション装置200、パーソナルコンピュータ300の各々に共通の構成や機能を説明する際には、それらを通信端末とも総称する。
携帯電話100は、キャリア網700に接続可能に構成されている。カーナビゲーション装置200は、インターネット500に接続可能に構成されている。パーソナルコンピュータ300は、LAN(Local Area Network)350やWAN(Wide Area Network
)を介してインターネット500に接続可能に構成されている。マッチングサーバ400は、インターネット500に接続可能に構成されている。メールサーバ600は、インターネット500およびキャリア網700に接続可能に構成されている。
より詳細には、第1の携帯電話100Aと、第2の携帯電話100Bと、第3の携帯電話100Cと、カーナビゲーション装置200と、パーソナルコンピュータ300とは、キャリア網700やメールサーバ600やインターネット500を介して互いに接続可能であって、互いにデータの送受信が可能である。また、携帯電話100とカーナビゲーション装置200とパーソナルコンピュータ300には、自端末を特定するための識別情報(たとえば、メールアドレスやIP(Internet Protocol)アドレスなど)が割当てられる。すなわち、携帯電話100とカーナビゲーション装置200とパーソナルコンピュータ300は、内部の記録媒体に他の通信端末の識別情報を記憶することができ、当該識別情報に基づいてキャリア網700やインターネット500などを介して当該他の通信端末とデータ送受信を行うことができる。
なお、本実施の形態に係る携帯電話100とカーナビゲーション装置200とパーソナルコンピュータ300とは、割当てられるIPアドレスを利用して、メールサーバ600を介さずに他の通信端末とデータ送受信を行うものである。ここでは、各通信端末がマッチングサーバ400にアクセスする際には、すなわち各通信端末がインターネットにアクセスした際に、マッチングサーバ400あるいは他の図示しないサーバ装置などによってIPアドレスが割当てられるものとする。IPアドレスの割当て処理の詳細は公知であるので、ここでは説明を繰り返さない。
また、本実施の形態に係る携帯電話100、カーナビゲーション装置200、パーソナルコンピュータ300は、自身に割当てられたIPアドレスを利用することにより、直接的に相互にネットワークを介してデータ送受信を行うことが可能である。すなわち、本実施の形態に係るネットワークシステム1に含まれる携帯電話100、カーナビゲーション装置200、パーソナルコンピュータ300は、いわゆるP2P通信のネットワークを構成することが可能である。
<携帯電話100のハードウェア構成>
本実施の形態に係る携帯電話100のハードウェア構成について説明する。図2は、本施の形態に係る携帯電話100の概観を示す図である。図3は、本施の形態に係る携帯電話100のハードウェア構成を示す図である。
図2および図3に示すように、本実施の形態に係る携帯電話100は、外部のネットワークとの間でデータを送受信する他の通信部101と、通話のためのTEL(Telephone)用通信部102と、プログラムや各種データベースを記憶する記憶部103と、CPU(Central Processing Unit)106Aを備えた制御部106と、ディスプレイ107と、外部から音声を入力するためのマイク108と、音声を外部に出力するためのスピーカ109と、各種情報の入力を受付ける入力部110と、電話および電子メールの着信をベルによる音や振動(バイブレーション)で報知するための第1の報知部111と、電話および電子メールの着信を光源(たとえば、LED(Light Emitting Diode))の発光で報知するための第2の報知部112とを含む。
本実施の形態に係るディスプレイ107は、液晶パネルやCRT(Cathode Ray Tube)から構成されるタッチパネルである。すなわち、本実施の形態に係る携帯電話100は、ディスプレイ107の下側(裏側)にタブレット119が敷設されている。ユーザはスタイラスペン120を用いてディスプレイ107上に文字・記号・図形などを描画すると、描画による軌跡を示す座標データがタブレット119を介して検出されて制御部106に与えられる。これにより、スタイラスペン120を操作して手書き入力した文字・記号・図形の情報を制御部106に入力することができる。ディスプレイ107は、制御部106が出力した情報に基づいて、手書き入力された画像やテキストを表示する。
入力部110は、スイッチ・キー・ボタンなどを備え、ユーザがスイッチ・キー・ボタンを操作することによって入力した情報を受付ける。たとえば、入力部110は、通話を受付けたり、通話を発したりするために操作されるTELボタン110Aと、メールを受付けたり、メールを発したりするために操作されるメールボタン110Bと、P2P通信を受付けたり、P2P通信を発したりするために操作されるP2Pボタン110Cと、アドレス帳データを参照するために操作されるアドレス帳ボタン110Dと、各種の処理を終了させるために操作される終了ボタン110Eとを含む。
第1の報知部111は、スピーカ109などを介して着信音(たとえばベル音)を出力する。あるいは、第1の報知部111は、バイブレーション機能を有する。第1の報知部111は、着呼に応じて、またはメール受信に応じて、音声を出力したり、携帯電話100を振動させたりする。
第2の報知部112は、着呼に応じて点滅するTEL用LED112Aと、メールを受信したときに点滅するメール用LED112Bと、P2P通信に従う信号を受信したときに点滅するP2P用LED112Cを含む。
制御部106は、CPU106Aを含むマイクロコンピュータによって実現され、携帯電話100の各部を制御する。たとえば、入力部110を介してユーザから各種の命令を受付けて、他の通信部101やTEL用通信部102やネットワークを介して外部の通信端末とデータの送受信を行う。
他の通信部101およびTEL用通信部102は、無線通信機能を有し無線通信を行なう。具体的には、制御部106からの通信データを通信信号に変換し、その通信信号を図示しないアンテナを介して発信する。他の通信部101およびTEL用通信部102は、アンテナを介して受信した通信信号を通信データに変換し、その通信データを制御部106に入力する。
記憶部103は、作業用メモリとして機能するRAM(Random Access Memory)や、制御プログラム・データなどを格納するROM(Read Only Memory)や、画像データなどを記憶するハードディスクなどによって実現される。図4、図5および図6は、図3の記憶部103に格納されるアドレス帳データ、自端末データおよびルームデータベースRMDBを示す図である。
図3に示すように、記憶部103の記憶領域103Aには、ルームデータベースRMDBが格納される。図6を参照してルームデータベースRMDBには、当該携帯電話100が開設または参加するルームのそれぞれに対応して、ルーム名のデータRNと、当該ルームに参加している他の携帯電話100のIPアドレスを指すデータIPAが格納される。
図3の記憶部103は、さらに、アドレス帳データAdrDB[]が格納される記憶領域103B、携帯電話100(自端末)に関するデータを指す自端末データMyAdrが格納される記憶領域103C、生成したルーム名のデータTNMを一時的に格納する記憶領域103D、自端末に割当てられたIPアドレスデータMY_IPADRを格納する記憶領域103E、およびマッチングサーバ400のアドレスデータSEV_ADRを格納する記憶領域103F含む。
上述したデータが格納される記憶部103の領域は、携帯電話100の電源がOFFされても記憶内容が消去しないメモリ、たとえばフラッシュメモリからなる。
図4を参照して、記憶領域103Bのアドレス帳データAdrDB[]には、宛先(他の通信端末)毎に個別にデータを格納する。具体的には、各通信端末毎に割当された記憶領域には、当該記憶領域を指示するメモリNoのデータ1031、宛先の名前のデータ1032、通話において相手端末を一意に識別するための電話番号のデータ1033、およびデータ通信において相手端末を一意に識別するためのメールアドレスを指すデータ1034が対応付けて格納される。
図5を参照して、記憶領域103Cの自端末データMyAdrは、自端末のユーザの名前、自端末を一意に識別するための電話番号およびメールアドレスを指すデータ1035、1036および1037を含む。
<携帯電話100の機能構成>
図7を参照して、本実施の形態に係る携帯電話100のCPU106Aは、端末通信部1061、フレーム解析部1062、フレーム生成部1063、入力受付部1064、報知処理部1065、通話機能に対応する通話処理部1066、メール処理部1067、P2P処理部1068、通知処理部1069、データ更新部1070およびルームアクセス部1071を備える。これらの各部の機能は予めプログラム・データとして記憶部103の所定記憶領域に格納されており、CPU106Aがこれらプログラム・データを記憶部103から読出し、実行することにより、各部の機能が実現される。
図7においては、CPU106Aが有する各機能とデータ・情報を入出力する周辺回路部のみが示される。
端末通信部1061は、電話による通信を制御するためのTEL用通信部102、ならびにサーバとの通信を制御するサーバ通信部1081およびIPアドレスを用いたP2P通信を制御するためのP2P通信部1082を含む。サーバ通信部1081およびP2P通信部1082はデータ通信部101の機能に相当する。
フレーム解析部1062は、端末通信部1061によって受信されたフレームを入力し、入力したフレームのデータを解析し、解析結果を出力する。フレーム生成部1063は、端末通信部1061を介して外部ネットワークに送信するべきフレームを生成する。入力受付部1064は、タブレット119および入力部110から入力されたデータを受付ける。報知処理部1065は、第1および第2の報知部111および112の出力動作を制御する。
メール処理部1067は、インターネット500などの通信網を経由する電子メールの通信を処理する。P2P処理部1068は、P2P通信に対応する処理を実行する。通知処理部1069は、端末通信部1061が外部から受信した通知を入力して、解析し、結果を出力する。データ更新部1070は、端末通信部1061が外部から受信した通知に従い、記憶部103のルームデータベースRMDBのデータを更新する。
ルームアクセス部1071は、P2P通信に従うチャット通信のためにマッチングサーバ400に格納されるルームのアクセスを制御する。ルーム名生成部1072は、P2P通信に従うチャット通信を開始するために、マッチングサーバ400に開設されるべきルームの名称を所定手順に従い生成する。所定手順は、ルームを一意に識別することのできるルーム名を生成できるものであればよい。ルーム検索要求部1073は、ルーム名に基づきルームの検索をマッチングサーバ400に対して要求する。ルーム開設要求部1074は、ルーム名に基づきルームの開設をマッチングサーバ400に対して要求する。ルーム参加要求部1075は、ルーム名に基づきルームへの参加をマッチングサーバ400に対して要求する。ルーム脱退要求部1076はルーム名に基づきルームからの脱退をマッチングサーバ400に対して要求する。
<マッチングサーバ400のハードウェア構成>
次に、本実施の形態に係るマッチングサーバ400のハードウェア構成について説明する。なお、メールサーバ600のハードウェア構成は、マッチングサーバ400のそれと同様であるので説明は略す。
図8は、本実施の形態に係るマッチングサーバ400のハードウェア構成を示すブロック図である。図8に示すように、本実施の形態に係るマッチングサーバ400は、相互に内部バス408で接続されたCPU405と、メモリ406と、固定ディスク407と、サーバ通信部409と、現在時刻を計時して時間データを出力する計時部410含む。
メモリ406は、各種の情報を記憶するものであって、たとえば、CPU405でのプログラムの実行に必要なデータを一時的に記憶する。固定ディスク407は、CPU105が実行するプログラムやデータベースを記憶する。CPU405は、マッチングサーバ400およびメールサーバ600の各要素を制御するものであって、各種の演算を実施する装置である。
サーバ通信部409は、CPU405が出力したデータを電気信号へと変換して外部へ送信し、外部から受信した電気信号をデータに変換してCPU405に入力する。具体的には、サーバ通信部409は、CPU405からのデータを、インターネット500やキャリア網700などを介して携帯電話100やカーナビゲーション装置200やパーソナルコンピュータ300に送信する。そして、インターネット500やキャリア網700を介して携帯電話100やカーナビゲーション装置200やパーソナルコンピュータ300から受信したデータを、CPU405に入力する。
<マッチングサーバ400の機能構成>
図9を参照して、マッチングサーバ400は、ルーム開設部420、ルームへの参加、ルームの検索およびルームからの脱退の要求を受付けて処理する参加受付部421A、検索受付部421Bおよび脱退受付部421Cを有するルーム受付部421、ルーム削除部422、フレーム生成部423、フレーム解析部424、イベント通知部425およびルーム毎に当該ルームを削除するべき時間(時刻)を設定する削除時間設定部426を含む。これらの各部は、固定ディスク407またはメモリ406の所定の記憶領域に予めプログラム・データとして格納されており、CPU405が所定記憶領域からプログラム・データを読出し、実行することにより、各部の機能が実現される。
メモリ406には、後述するルーム管理テーブルRMTBL[]、知人用テーブルATBL0およびコミュニティ用テーブルATBL1、ならびにマッチングサーバアドレスのデータMSADが格納される。
ルーム開設部420は、メモリ406のルーム管理テーブルRMTBL[]に、新たに開設するべきルームに対応するデータを格納することにより、ルームを開設する。ルーム削除部422は、要求されたルームをルーム管理テーブルRMTBL[]から削除する。フレーム生成部423は、サーバ通信部409を介してインターネット500に送信するべきデータのフレームを生成し、生成したフレームをサーバ通信部409に出力する。フレーム解析部424は、サーバ通信部409がインターネット500を介して受信したフレームのデータを解析し、解析結果を出力する。
イベント通知部425は、参加通知部425Aおよび脱退通知部425Bを含む。参加通知部425Aは、ルーム管理テーブルRMTBL[]のルームへの参加が検出されたとき、当該ルームに既に参加している他の携帯電話100宛てに、参加の検出を通知する。脱退通知部425Bは、ルーム管理テーブルRMTBL[]のルームかからの脱退が検出されたとき、当該ルームに既に参加している他の携帯電話100宛てに、脱退の検出を通知する。
削除時間設定部426は、ルームの開設またはルームへの参加またはルームからの脱退が検出される毎に、当該ルームを削除するべき時間を、知人用テーブルATBL0またはコミュニティ用テーブルATBL1のデータに従い決定する。
<テーブルの構成>
図10を参照して、ルーム管理テーブルRMTBL[]の構成について説明する。ルーム管理テーブルRMTBL[]は、MAX個のルームのデータを格納可能な容量を有し、各ルームに対応してデータRMTBL[i](iは0、1、2、…、(MAX−1)の値)を格納する。
データRMTBL[i]は、当該データが無効または当該ルームが削除済みの場合は値0を示し、当該ルームが削除されておらずデータが有効な場合には値1を示すデータRMTBL[i].FLAG、当該ルームのルーム名(ルームID(Identification))を示すデータRMTBL[i].RMNM、当該ルームの開設理由、または開設の目的を示すデータRMTBL[i].APL、当該ルームに参加が許容される端末の最大台数を指す定員数(たとえば、10)を示すデータRMTBL[i].NUM、当該ルームに参加している端末の数を示すデータRMTBL[i].ECNT、当該ルームを削除するべき時間を示すデータRMTBL[i].DELTM、ならびに当該ルームに参加している端末のIPアドレスおよびメールアドレスのデータRMTBL[i].IPA[j]およびRMTBL[i].MA[j](ただしj=0、1、2、…、9)を含む。
データRMTBL[i].FLAGが‘0’を指す場合、当該データRMTBL[i]の領域は1種の空領域を指し、新たなルームのデータを格納することが可能である。
データRMTBL[i].APLの値が“0”を指示する場合、当該ルームは知人への呼びかけのために開設されて、主に知人同士のチャットのために用いられる。値“1”を示す場合には、当該ルームは、不特定多数の者がチャットで集うことによりコミュニティを形成するために用いられる。
上述の削除日時生成用テーブルATBL0は、データRMTBL[i].APLの値が“0”(知人用)を指示するルームを削除するべき時間を設定するために、ルームの開設またはルームへの参加の検出時に、参照される。図11を参照して、削除日時生成用テーブルATBL0は、ルームの開設またはルームへの参加の検出時点において当該ルームにまだ参加していない端末の台数(=データRMTBL[i].NUM−現在参加している端末台数)を示すデータA0と、データA0のそれぞれに対応して当該ルームを削除するまでの猶予時間のデータB0を格納する。
たとえば、ルームへの未参加端末台数が1台(A0=1)であった場合には、未参加端末数が1台である状態が5分間(B0=5)経過した時点で、当該ルームは削除される。同様に、ルームへの未参加端末台数が2〜5台(A0=2〜5)のいずれかの値であった場合には、未参加端末台数が増減しない状態が維持されて10分間(B0=10)経過すると、当該ルームは削除される。同様に、ルームへの未参加端末台数が6台以上(A0=6以上)であった場合には、未参加端末台数が増減しない状態が維持されて所定の最大時間TMAX(たとえば30分)を経過した時点で当該ルームは削除される。
上述の削除日時生成用テーブルATBL1は、データRMTBL[i].APLの値が“1”(コミュニティ用)を指示するルームを削除するべき時間を設定するために、ルームからの退出の検出時に、参照される。図12を参照して、削除日時生成用テーブルATBL1は、ルームからの脱退を検出した時点において脱退後に当該ルームに現在参加している端末の台数を示すデータA1と、データA1のそれぞれに対応して当該ルームを削除するまでの猶予時間のデータB1を格納する。
たとえば、ルームに参加している端末台数が1台(A1=1)であった場合には、参加端末数が1台である状態が1分間(B1=1)経過した時点で、当該ルームは削除される。同様に、ルームに参加している端末台数が2〜5台(A1=2〜5)のいずれかの値であった場合には、参加端末台数が増減しない状態が維持されて10分間(B1=10)経過すると、当該ルームは削除される。同様に、ルームに参加している端末台数が6台以上(A1=6以上)であった場合には、参加端末台数が増減しない状態が維持されて所定の最大時間TMAX(たとえば30分)を経過した時点で当該ルームは削除される。
<P2P通信の概要>
図13は、ネットワークシステム1における通信手順を模式的に示す図である。本実施の形態に係る各通信端末は、P2P通信を行うために、はじめに互いのIPアドレスを交換(取得)する必要がある。そして、各通信端末は、IPアドレスを取得した後に、P2P通信によってメッセージや添付ファイルなどを他の通信端末に送信する。ここでは、携帯電話100には、予めIPアドレスが割当てられていると想定する。
まず、携帯電話100A(図13において端末A)は、P2P通信を開始するために、たとえば定員数が3の知人用チャットのためのルーム‘R’の開設要求をマッチングサーバ400宛てに送信する(ステップS002)。
マッチングサーバ400では、ルーム‘R’をルーム管理テーブルRMTBL[]に開設する。ルーム‘R’のデータRMTBL[i].FLAGは1に更新される。そして、データRMTBL[i].IPA[j]として、携帯電話100AのIPアドレス‘A’が設定される。この開設に応じて、削除時間設定部426によって、知人用テーブルATBL0を参照して、当該ルームを削除するべき時間のデータRMTBL[i].DELTMが設定される(ステップS003)。
次に、携帯電話100Cはマッチングサーバ400に開設されているルームを検索することにより、ルーム‘R’を検出すると、ルーム‘R’への参加要求を、マッチングサーバ400宛てに送信する(ステップS008)。また、データRMTBL[i].IPA[j+1]が指す携帯電話100CのIPアドレスがルーム管理テーブルRMTBL[]に格納される。この参加の検出に応じて、削除時間設定部426によって、知人用テーブルATBL0を参照して、当該ルームを削除するべき時間のデータRMTBL[i].DELTMが更新される(ステップS009)。
マッチングサーバ400は、ルーム参加要求を受信すると、マッチング処理を開始する。
マッチング処理においては、ルーム‘R’のデータRMTBL[i]のデータRMTBL[i].IPA[j]が指す携帯電話100AのIPアドレスが携帯電話100C宛てに送信されて、データRMTBL[i].IPA[j+1]が指す携帯電話100CのIPアドレスが携帯電話100A宛てに送信される(ステップS010)。
その後、当該ルームへの参加台数が変化しない状態が継続して、その結果、計時部410が指す現在時刻データがデータRMTBL[i].DELTMの時間データに一致することが検出されると、ルーム削除部422により、当該ルームのデータRMTBL[i].FLAGは0に更新される(ステップS011)。これにより、当該ルームは削除される。
マッチング処理によって、ルーム名‘R’のルームに参加した携帯電話100Aおよび100Cのユーザは、お互いのIPアドレスを交換することができる。以降、両者は、交換により取得したIPアドレスを用いてP2P通信を行うことができる。
まず、携帯電話100Aは、取得したIPアドレス‘C’に基づいて携帯電話100CにP2P接続要求メッセージ(開始メッセージ)を送信する(ステップS012)。携帯電話100Cは、接続要求メッセージを受信して、携帯電話100AのIPアドレ‘A’に基づいて携帯電話100Aに第1の接続承諾メッセージ(返答メッセージ)を送信する(ステップS014)。携帯電話100Aは、携帯電話100Cから第1の接続承諾メッセージを受信して、第2の携帯電話100Cに第2の接続承諾メッセージを送信する(ステップS016)。
このようにして、携帯電話100Aと携帯電話100Cとは、互いに相手を認証する。認証が完了すると、携帯電話100Aと携帯電話100Cとは、P2P通信を開始する(ステップS018)。そして携帯電話100Aと100Cの間では、P2P通信に従うメッセージなどのデータ通信が行なわれる。
その後、携帯電話100Aが、携帯電話100CにP2P通信を切断する旨のメッセージを送信すると(ステップS030)、携帯電話100Cは、携帯電話100Aに切断する要求を受付けた旨のメッセージを送信する(ステップS032)。
<通信フレームの構成>
図14にはフレームの基本的構成が示される。図15〜図22には、携帯電話100とマッチングサーバ400の間で送受信されるフレームの構成が示され、図23と図24には、ルームへの参加またはルームからの脱退というイベントを検出した場合に、当該イベント発生を通知するために、マッチングサーバ400から当該ルームに参加している携帯電話100宛てに送信されるフレームの構成が示される。
図14を参照してフレームは、基本的に、ヘッダ部610とデータ部620を含む。ヘッダ部610には、当該フレームの種別(タイプ)を指示するデータ611、当該フレームの宛先‘DD’を示すデータ612および当該フレームの送信元‘SD’を示すデータ613が格納される。データ部620は、送信すべきデータを格納する。
データ611が示すタイプは、本実施の形態では、要求フレームであることを示す“1”と、要求の受付フレームであることを示す“0”と、通知フレームであることを示す“2”のいずれかの値となる。また、本実施の形態ではフレームは、携帯電話100とマッチングサーバ400との間で送受信されるため、データ612および613としては、携帯電話100の記憶部103から読出されたメールアドレスのデータ1037、およびマッチングサーバアドレスのデータMSADまたは記憶領域103FのアドレスデータSEV_ADRが格納される。
携帯電話100のルーム検索要求部1073が、ルーム管理テーブルRMTBL[]のルームの検索を要求する場合には、フレーム生成部1063が図15のルーム検索要求のフレーム599を生成する。生成したフレームはサーバ通信部1081によってマッチングサーバ400宛てに送信される。
フレーム599は、データ611が“1”を指示し、データ612および613として、記憶部103から読出されたマッチングサーバ400のアドレスデータSEV_ADRとメールアドレスのデータ1037がそれぞれ格納される。また、データ部620には、検索の命令コード(‘RM_SEARCH’)621と、ルーム名のデータ622と、IPアドレスのデータ623とが格納される。データ622として、検索すべきルームのルーム名のデータが格納される。データ623として、送信元の携帯電話100に予め割当てられたIPアドレスのデータMY_IPADRが、記憶部103から読出されて格納される。
マッチングサーバ400は、ルーム検索要求のフレーム599を受信した場合に、フレーム生成部423は、図16のルーム検索受付のフレーム600を生成し、要求元の携帯電話100宛てに送信する。フレーム600は、ヘッダ部610においてデータ611は“0”を示し、データ612として受信したフレーム599のデータ613が格納される。また、データ613として、記憶部406から読出したマッチングサーバアドレスのデータMSADが格納される。データ部620には、命令コード621として空データが格納される。また、受信したルーム検索要求のフレーム599のデータ622が格納される。また、ルーム検索要求に基づき検索受付部421Bがルーム管理テーブルRMTBL[]を検索した結果のデータ626が格納される。データ626は、検索が要求されたルームが、すなわちデータ622が指すルーム名のデータRMTBL[i].RMNMがルーム管理テーブルRMTBL[]に格納されていた場合には‘0’(=‘OK’)を指示し、格納されていなかった場合には‘−1’(=‘ERROR’)を指示する。
携帯電話100が、ルーム開設を要求する場合には、フレーム生成部1063が図17のルーム開設要求のフレーム601を生成する。生成したフレーム601は、サーバ通信部1081によってマッチングサーバ400に宛てて送信される。
フレーム601は、データ611が“1”を指示し、データ612および613として、記憶部103から読出されたマッチングサーバ400のアドレスデータSEV_ADRとメールアドレスのデータ1037がそれぞれ格納される。また、データ部620には、開設の命令コード(‘RM_CREATE’)621と、ルーム名のデータ622と、IPアドレスのデータ623と、さらにルーム開設の条件を示すパラメータとしてルーム開設目的のデータ627と、当該ルームの定員数のデータ628とが格納される。データ622として、ルーム名生成部1072によって生成されたルーム名のデータが格納される。データ623として、送信元の携帯電話100に予め割当てられたIPアドレスのデータMY_IPADRが、記憶部103から読出されて格納される。データ627および628は、たとえば、記憶部103の所定領域に予め記憶したデータ、または入力受付部1064が外部から入力したデータを指す。
マッチングサーバ400は、ルーム開設要求のフレーム601を受信した場合に、フレーム生成部423は、図18のルーム開設受付のフレーム602を生成し、要求元の携帯電話100宛てに送信する。フレーム602は、ヘッダ部610においてデータ611は“0”を示し、データ612として受信したフレーム601のデータ613が格納される。また、データ613として、メモリ406から読出したマッチングサーバアドレスのデータMSADが格納される。データ部620には、命令コード621として空データが格納される。また、受信したルーム開設要求フレーム601のデータ622が格納される。また、データ624として、ルーム開設要求に基づいたルーム開設部420によるルーム開設の結果のデータが格納される。データ624は、データ622が指すルーム名のルーム開設に成功した場合には‘0’(=‘OK’)を指示し、開設できなかった場合には‘−1’(=‘ERROR’)を指示する。開設できない場合とは、たとえば、既に、同一ルーム名のルームが開設されている場合、またはルーム管理テーブルRMTBL[]の空領域が無い場合などである。
携帯電話100のルーム参加要求部1075が、ルームへの参加を要求する場合には、フレーム生成部1063が図19のルーム参加要求のフレーム603を生成する。生成したフレーム603はサーバ通信部1081によってマッチングサーバ400に宛てて送信される。
フレーム603は、データ611が“1”を指示し、データ612および613として、記憶部103から読出されたマッチングサーバ400のアドレスデータSEV_ADRとメールアドレスのデータ1037がそれぞれ格納される。また、データ部620には、参加の命令コード(‘RM_ENTRY’)621と、ルーム名のデータ622と、IPアドレスのデータ623とが格納される。データ622として、参加すべきルームのルーム名のデータが格納される。データ623として、送信元の携帯電話100に予め割当てられたIPアドレスのデータMY_IPADRが、記憶部103から読出されて格納される。
携帯電話100が図19のルーム参加要求のフレーム603を送信した場合において、マッチングサーバ400の参加受付部421Aは当該フレーム603のデータ622が指示するルーム名に基づきルーム管理テーブルRMTBL[]を検索する。検索結果に基づき、図20に示すルーム参加受付のフレーム604が生成されて、要求元の携帯電話100に送信される。
具体的には、検索結果、データ622が指示するルーム名を有するルームが既に開設されていると判定した場合には、マッチング処理により、参加要求元の携帯電話100と、指示されたルーム名のルームに既に参加していた携帯電話100のそれぞれに宛てて図20の参加受付フレーム604が生成されて送信される。
参加要求元の携帯電話100宛のフレーム604は、データ部620において、ルーム参加要求のフレーム603のデータ622が格納される。また、当該ルーム参加要求が受付けられたことを示す“参加受付(値‘0’)”を示すデータ624と、当該ルームに既に参加している他のユーザの携帯電話100のIPアドレスのデータRMTBL[i].IPA[j]が、ルーム管理テーブルRMTBL[]から読出されてデータ625として格納される。
既に当該ルームに参加していた携帯電話100宛てのフレーム604は、ヘッダ部610のデータ611は“0”を指し、データ612はこの携帯電話100のメールアドレスを指示し、データ613はマッチングサーバアドレスのデータMSADを指す。データ612のメールアドレスは、ルーム管理テーブルRMTBL[]を検索して読出した当該ルーム名を指示するデータRMTBL[i].RMNMに対応して格納されたメールアドレスのデータRMTBL[i].MA[j]を指す。データ部620には、ルーム参加要求のフレーム603のデータ622が格納される。また、当該ルーム参加要求が受付けられたことを示す“参加受付”(値‘0’)を示すデータ624と、当該ルームに参加要求をした他の携帯電話100のIPアドレスを指すデータ625が格納される。
なお、参加の受付けに成功しなかった場合には、すなわち検索結果に基づきルーム管理テーブルRMTBL[]において要求したルームが未開設であると検出した場合には、データ624には、参加を受付なったことを指す値‘−1’が設定されたフレーム604が要求元の携帯電話100に送信される。
携帯電話100のルーム脱退要求部1076が、ルームからの脱退をマッチングサーバ400に対して要求する場合には、フレーム生成部1063が図21に示すルーム脱退要求のフレーム605をマッチングサーバ400に宛てて送信する。フレーム605は、ヘッダ部610においてデータ611が“1”を指示し、データ612および613として、記憶部103から読出されたマッチングサーバ400のアドレスデータSEV_ADRとメールアドレスのデータ1037がそれぞれ格納される。また、データ部620には、脱退の命令コード(‘RM_LEAVE’)621と、脱退するべきルームのルーム名のデータ622と、IPアドレスのデータ623とが格納される。データ623として、ルーム脱退要求フレーム送信元の携帯電話100に予め割当てられたIPアドレスのデータMY_IPADRが、記憶部103から読出されて格納される。
マッチングサーバ400は、ルーム脱退要求のフレーム605を受信した場合に、フレーム生成部423は、図22のルーム脱退受付のフレーム606を生成し、要求元の携帯電話100宛てに送信する。フレーム606は、ヘッダ部610においてデータ611は“0”を示し、データ612として受信したフレーム605のデータ613が格納される。また、データ613として、記憶部406から読出したマッチングサーバアドレスのデータMSADが格納される。データ部620には、命令コード621として空データが格納される。また、受信したルーム脱退要求のフレーム605のデータ622が格納される。また、データ624として、ルーム脱退要求に基づきルーム脱退受付部421Cが脱退処理した結果のデータ624が格納される。データ624は、データ622が指すルーム名のルームからの脱退に成功した場合には‘0’(=‘OK’)を指示し、成功しなかった場合には‘−1’(=‘ERROR’)を指示する。脱退処理とは、ルーム脱退受付部421Cが、ルーム脱退要求フレーム605のデータ622のルーム名を指すデータRMTBL[i].RMNMに対応のデータRMTBL[i].IPA[j]のうち、ルーム脱退要求フレーム605のデータ623のIPアドレスを指すデータを削除する処理をいう。このデータRMTBL[].IPA[j]の削除処理は、当該データRMTBL[i].IPA[j]の領域を新たなIPアドレスを格納可能な領域に更新する処理であればよい。たとえば、当該領域に空データ(NULLデータ)を書込むことにより削除するとしてもよい。
図23と図24を参照して参加と脱退のイベント通知のフレームについて説明する。図23および図24の通知フレームのいずれも、ヘッダ部610においては、種別データ611は値“2”を指示し、データ612は、当該フレームの宛先アドレス、すなわち当該ルームに参加している携帯電話100のメールアドレスを示す。このメールアドレスは、参加または脱退の対象ルームのデータRMTBL[i]のデータRMTBL[i].MA[j]を、ルーム管理テーブルRMTBL[]から読出して当該ヘッダ部610に格納することにより設定される。データ613は送信元アドレス、すなわちメモリ406から読出されたマッチングサーバアドレスのデータMSADが読出されて格納される。
データ部620に関して、図23の参加のイベント通知フレーム607では、命令コード621としてルームに新たな端末が参加したことを通知するためのコマンドMEM_APPENDが格納され、データ622には、端末の参加が検出されたルームのルーム名を指すデータRMTBL[i].RMNMが格納される。データ623には、当該ルームに新たに参加した端末のIPアドレスのデータRMTBL[i].IPA[j]が、ルーム管理テーブルRMTBL[]から読出されて格納される。
データ部620に関して、図24の脱退のイベント通知フレーム608では、命令コード621として脱退端末が発生したことを示すコマンドMEM_LEAVEが格納され、データ622には、端末の脱退が生じたルームのルーム名が、すなわちデータRMTBL[i].RMNMが、データ623には、脱退を要求した端末のIPアドレスのデータRMTBL[i].IPA[j]が、それぞれルーム管理テーブルRMTBL[]から読出されて格納される。
<マッチングサーバからの通知に応じた処理>
携帯電話100が、マッチングサーバ400から図23の参加通知フレーム607を受信した場合には、通知処理部1069は、参加通知フレーム607のデータ622に基づきルームデータベースRMDBを検索する。検索結果に基づき、データ622のルーム名を指すデータRNに対応するデータIPAに、参加通知フレーム607のデータ623が指すIPアドレスのデータを格納する。これにより、当該ルームに新たに参加したユーザのIPアドレスを取得できる。
また、携帯電話100が、マッチングサーバ400から図24の脱退通知フレーム608を受信した場合には、通知処理部1069は、脱退通知フレーム608のデータ622に基づきルームデータベースRMDBを検索する。検索結果に基づき、データ622のルーム名を指すデータRNに対応するデータIPAから、脱退通知フレーム608のデータ623が指すIPアドレスのデータを削除する。これにより、当該ルームから脱退したユーザのIPアドレスを破棄することができる。
<携帯電話の処理>
図25を参照して、本実施の形態に係る携帯電話100におけるルームへのアクセスまたはP2P通信を開始する場合の処理手順について説明する。
まず、入力受付部1064は、タブレット119または入力部110がユーザによって操作されて、何らかの指示が与えられるか否かを判定する(ステップS201)。何らの操作もされない間は、ステップS201の判定処理が繰返される。
一方、何らかの操作がされて入力が検知されると(ステップS201でYES)、入力受付部1064は、タブレット119または入力部110から与えられる信号に基づき、P2Pボタン110Cが操作されたか否かを判定する(ステップS203)。P2Pボタン110C以外の操作がされたと判定すると(ステップS203でNO)、操作されたボタンの種類に応じた他の処理へ移行する。この他の処理については、説明を略す。
一方、P2Pボタン110Cが操作されたと判定すると(ステップS203でYES)、CPU106Aは、記憶部103の所定記憶領域から読出した画像データに基づき、ディスプレイ107に図26(A)〜(C)のメニュー画面を表示する(ステップS205)。
図26(A)には、P2Pボタン110Cが操作された場合のメニュー画面の一例が示される。メニュー画面においては、P2P通信の開始およびルームアクセス(開設、参加、検索および脱退)のいずれかを要求するために指定されるアイコン1071が表示されるとともに、当該アイコンに示された要求を入力するために操作されるボタン1073が表示される。たとえば、ユーザが“ルーム開設”のアイコン1071を操作してボタン1073を操作すると、ディスプレイ107の画面は、図26(B)の画面に切り替えられる。図26(B)においては“ルーム開設”の要求のアイコン1071が選択された状態と、ルーム開設要求のために必要とされるデータの入力をするためのウインドウ1072が表示される。ウインドウ1072は、開設すべきルームのルーム名、ならびにルーム開設の条件を指すパラメータとしてルームの開設目的(0:知人用のルーム、1:コミュニティ用のルーム)、および当該ルームに参加可能な最大端末数(定員数)を入力するために表示される。
なお、ルーム名の入力は、スタイラスペン120を操作してウインドウ1072から直接に所望のルーム名を入力してもよく、または、ルーム名生成のためのパラメータを入力するとしてもよい。パラメータが入力された場合には、ルーム名生成部1072は、入力したパラメータに基づき所定手順に従いルーム名を生成する。入力または生成されたルーム名は、記憶部103の記憶領域103DにデータTNMとして格納される。以降の、各種要求フレームの生成時には、当該データTMNが記憶領域103Dから読出されて用いられる、と想定する。
図26(C)には、図26(A)のメニュー画面において“ルーム参加”のアイコン1071が選択されて、“ルーム参加”の要求が入力された場合の表示画面の一例が示される。図26(C)では、参加を希望するルームのルーム名を入力するためのウインドウ1072が表示される。このルーム名の入力時には、上述のルーム名の入力・生成の他に記憶部103のルームデータベースRMDBから読出したルーム名のデータRNがリスト形式で表示されて、そのリストから選択的に入力するとしてもよい。
図26のメニュー画面においてユーザが所望の項目を選択すると、図25のステップS207において、入力受付部1064は、ユーザが選択した項目を検出する。検出の結果、“P2P通信”が選択された場合には、P2P処理部1068が起動される(ステップS209)。P2P処理部1068は、記憶部103から読出したIPアドレスMY_IPADRとルームデータベースRMDBから読出したユーザが指定するIPアドレスのデータIPAを用いてP2P通信部1082を介して、P2P通信が行なわれる。その後、処理は、終了する。
“ルーム開設”が選択された場合にはルーム開設要求部1074により、ルーム開設要求処理(ステップS211)が行なわれる。“ルーム参加”が選択された場合にはルーム参加要求部1075により、ルーム参加要求処理(ステップS213)が行なわれる。“ルーム検索”が選択された場合にはルーム検索要求部1073によりルーム検索要求処理(ステップS215)が行なわれる。“ルーム脱退”が選択された場合には、ルーム脱退要求部1076により、ルーム脱退要求処理(ステップS217)が行なわれる。ステップS211、S213、S215およびS217の処理後、これら各処理において生成された要求フレームが、サーバ通信部1081を介してマッチングサーバ400宛てに送信される(ステップS219)。
マッチングサーバ400においては、携帯電話100からステップS219において送信された要求フレームを受信すると、受信した要求フレームのデータに従う処理を実行し、要求フレームを受付けたことを示す受付フレームを生成し、当該携帯電話100宛に送信する。要求元の携帯電話100のサーバ通信部1081は、マッチングサーバ400から、この受付フレームを受信し、フレーム解析部1062はフレームのデータを解析し解析結果を、データ更新部1070に与えるとともに、通知処理部1065に与える。通知処理部1065は、与えられる解析結果に基づき、要求の受付結果を、第1の報知部111または第2の報知部112を制御して、ベルの鳴動、携帯電話100自体の振動、またはLEDの点灯制御によりユーザに対し報知する(ステップS213)。この報知は、ディスプレイ107において、画像として出力されてもよい。
データ更新部1070は、与えられる解析結果に基づき、記憶部103のルームデータベースRMDBを検索し、ルームデータベースRMDBのデータを更新する。具体的には、ルーム開設要求の受付が成功したことを指すフレーム602を受信した場合には、フレーム602のデータ622が指すルーム名のデータRNをルームデータRMDBに格納する。
ルーム参加要求を受付けた旨のフレーム604を受信した場合には、当該フレーム604から読出した他の参加端末のIPアドレスのデータ625を、ルームデータベースRMDBにおいて、当該フレーム604のデータ622が指すルーム名のデータRNに対応付けて、データIPAとして格納する。
ルーム検索要求の受付が失敗したことを指すフレーム600を受信した場合には、当該ルームは開設されていないと判定して、フレーム600のデータ622が指すルーム名のデータRNをルームデータRMDBから削除するようにしてもよい。
またルーム脱退要求に対する受付フレーム606を受信した場合には、脱退を要求したルームのデータRNとこれに対応のデータIPAをルームデータベースRMDBから削除する。その後、処理は終了する。
<マッチングサーバの処理>
図27を参照して、マッチングサーバ400において定期的に繰返されるメイン処理について説明する。
まず、マッチングサーバ400のサーバ通信部409は、インターネット500から何らかのデータを受信するか否かを判定する(ステップS3)。データの受信が検出されないと、後述のルーム削除処理(ステップS27)を開始する。
一方、データの受信があった場合(ステップS3でYES)、受信データは、フレーム解析部424に与えられる。フレーム解析部424は、与えられるデータ、すなわちフレームのデータを解析し、解析結果に基づき、命令コード621がRM_CREATE、RM_ENTRY、RM_LEAVEおよびMEM_APPENDのいずれを指示するかを判定する(ステップS5、S15、S19、S23)。RM_CREATEを指示すると判定した場合には(ステップS5でYES)、ルーム開設部20が起動されて、ルーム開設処理が実行される(ステップS7)。RM_ENTRYを指示すると判定した場合には(ステップS15でYES)、参加受付部421Aが起動されて、参加受付部421Aにより参加処理が実行される(ステップS17)。RM_LEAVEを指示すると判定した場合には(ステップS19でYES)、脱退受付部421Cが起動されて、脱退受付部421Cにより脱退処理が実行される(ステップS21)。RM_SEARCHを指示すると判定した場合には(ステップS23でYES)、検索受付部421Bが起動されて、検索受付部421Bにより検索処理が実行される(ステップS25)。
ステップS7、S17、S21およびS25の処理の結果を格納した戻り値RTに基づき、CPU405は、当該戻り値RTがエラー(ERROR)を指示するか否かを判定する(ステップS9)。エラーを指示しないと判定した場合には(ステップS9でNO)、要求元の携帯電話100に対し要求を受付けたことを指示する値0(OK)を格納した受付フレームを、フレーム生成部423によって生成し、サーバ通信部409を介して送信する(ステップS11)。戻り値RTがエラーを指示すると判定すると(ステップS9でYES)、フレーム生成部423によって要求の受付結果として値−1(ERROR)を格納した受付フレームを生成し、サーバ通信部409を介して送信する(ステップS13)。受付フレームを送信後は、処理は、ステップS3に戻る。
フレーム解析部424の解析結果に基づき、受信フレームの命令コード621はRM_CREATE、RM_ENTRY、RM_LEAVEおよびRM_SEARCHのいずれも指示しないと判定すると(ステップS5でNO、ステップS15でNO、ステップS19でNO、ステップS23でNO)、ルーム削除部422が起動される。
ルーム削除部422は、開設されているルームのうち対応のデータRMTBL[i].DELTMが削除するべき時間を指示しているルームを削除するルーム削除処理を実行する。 具体的には、ルーム検索のための変数iに値0を設定し、変数TMに計時部410から読出した現在時刻を示す時間データを設定する。
続いて、ルーム削除部422は、ルーム管理テーブルRMTBL[]を検索し、データRMTBL[i].FLAGの値が1を指示するか否かを判定する(ステップS29)。データRMTBL[i].FLAGが1を指示するならば(ステップS29でYES)対応するデータRMTBL[i].DELTMの値が変数TMの値と比較され、比較結果に基づき、(RMTBL[i].DELTM<TM)の条件が成立するか否かが判定される(ステップS31)。
ステップS31の条件式が成立すると判定されると(ステップS31でYES)、すなわち当該ルームのデータRMTBL[i].DELTMは当該ルームを削除すべき時間が経過していることを指示していると判定された場合には、ルーム削除部422は、ルーム管理テーブルRMTBL[]のデータRMTBL[i].FLAGの値を0に更新することにより(ステップS33)、当該ルームを削除する。続いて、変数iの値が+1更新され(ステップS35)、その後、変数iの値と、ルーム管理テーブルRMTBL[]の格納可能最大ルーム数を示す定数MAXの値と比較されて、比較結果に基づき、(i=MAX)の条件が成立するか否かが判定される(ステップS37)。成立すると判定されると(ステップS37でYES)、すなわちルーム管理テーブルRMTBL[]のすべてのルームについて検索がされたと判定されると、処理は、ステップS3に戻り、ステップS3以降の処理が同様に繰返される。
一方、(i=MAX)の条件が成立しないと判定されると(ステップS37でNO)、処理は、ステップS29に戻り、次位のルームについて、ステップS29以降の処理が同様に繰返される。
一方、ルームのデータRMTBL[i].FLAGの値が“1”ではない、すなわち当該ルームは削除済み・未開設であると判定されると(ステップS29でNO)、または当該ルームについて(RMTBL[i].DELTM<TM)の条件が成立しないと判定されると(ステップS31でNO)、ルームの削除処理(ステップS33)は行なわれず、処理は、ステップS35に移行する。
以上のように、ルーム削除部422は、ルーム管理テーブルRMTBL[]に開設された各ルームについて(RMTBL[i].DELTM<TM)の条件が成立するか否かを判定し、その判定結果に基づき当該ルームを削除(ステップS33)する。したがって、定期的にステップS27〜S37のルーム削除処理が実行されることによって、データRMTBL[i].DELTMの時間が経過していると判定されたルームを、ルーム管理テーブルRMTBL[]から自動的に削除することができる。
<ルーム開設処理>
図28を参照して、図27のルーム開設処理(ステップS7)について説明する。
ルーム開設部420は、まず検索受付部421Bを起動し、ルーム管理テーブルRMTBL[]の検索を要求する(ステップS41)。検索受付部421Bによるルーム検索処理については後述する。
ルーム開設部420は、検索受付部421Bによる検索結果を示す戻り値RTの値が“ERROR”を指示しない、すなわち検索要求したルーム名のルームがルーム管理テーブルRMTBL[]に既に開設されている(既に同一名のルーム名がある)と判定した場合には(ステップS43でNO)、戻り値RTを‘ERROR’に設定し、図27の処理に戻る(ステップS67)。
一方、検索処理(ステップS41)の検索結果を示す戻り値RTが“ERROR”を指示すると判定すると(ステップS43でYES)、すなわち検索を要求したルーム名を有するルームはルーム管理テーブルRMTBL[]にまだ開設されていないと判定すると、ルーム開設部420は、変数iに0を設定し(ステップS45)、変数iの値を1ずつインクリメントしながら(ステップS49)、ルーム管理テーブルRMTBL[]を検索する。具体的には、変数iの値がルーム管理テーブルRMTBL[]に格納可能な最大ルーム数を示す定数MAXの値を指示するまで(ステップS51でYES)、各ルームのデータRMTBL[i].FLAGの値が“1”を指示するか否か、すなわち新たなルームを開設可能な空きエリアがあるか否かを判定する(ステップS47)。ルーム管理テーブルRMTBL[]の検索の結果、(i=MAX)の条件式が成立すると判定すると(ステップS51でYES)、すなわち新たなルームを開設するための空きエリアはルーム管理テーブルRMTBL[]には存在しないと判定されると(ステップS51でYES)、戻り値RTに“ERROR”を設定して、図27の処理に戻る(ステップS69)。
一方、ルーム管理テーブルテーブルRMTBL[]において新たなルームを開設するための空きエリアがあったと判定されると(ステップS47でNO)、ステップS53において、ルーム開設部420は、ルーム管理テーブルRMTBL[]の空きエリアに、ルーム開設要求フレーム601が指示するルームを開設(ルームの情報を格納)する。
具体的には、データRMTBL[i].MA[0]、RMTBL[i].IPA[0]、RMTBL[i].RMNM、RMTBL[i].APL、およびRMTBL[i].NUMに、受信したルーム開設要求フレーム601の内容に基づくデータを格納する。詳細には、データRMTBL[i].MA[0]には、ルーム開設要求フレーム601のデータ613のメールアドレスが設定され、データRMTBL[i].IPA[0]には、要求フレーム601のデータ623が示すIPアドレスが設定され、データRMTBL[i].RMNMには、要求フレーム601のデータ622が示すルーム名が設定され、データRMTBL[i].APLには、要求フレーム601のデータ627の値(1または0)が設定され、データRMTBL[i].NUMには、要求フレーム601のデータ628の値が設定される。
さらに、ステップS53においては、データRMTBL[i].ECNTに、値1が設定される。これにより、当該ルームに現在参加している(脱退要求をしていない)端末数は1台であることが指示される。さらに、変数Nに、(RMTBL[i].RMNM−RMTBL[i].ECNT)の算出結果が格納される。変数Nは、現時点で当該ルームへ新たに参加が許容される端末の台数(以下、現在参加許容台数という)を指示する。
その後、削除時間設定部426が起動されて、削除時間設定処理(TMERSET1)が行なわれる。
具体的には、削除時間設定部426は、検索受付部421Bを制御して、ルーム管理テーブルRMTBL[]を検索する。検索の結果、開設されたルームのデータRMTBL[i].APLの値が0を指示するか否かを判定する(ステップS55)。“0”を指示しないと判定すると、すなわち当該ルームの開設目的はコミュニティ用であると判定すると(ステップS55でNO)、ステップS65において、削除時間設定部426は、今回開設したルームのデータRMTBL[i].DELTMの値に、現在時刻+定数TMAX(たとえば30分)を加算した値を設定する(ステップS65)。その後、戻り値RTを“正常”(‘OK’)に設定して、図27の処理に戻る(ステップS71)。
一方、今回開設したルームのデータRMTBL[i].APLの値が“0”を指示すると判定すると、すなわち当該ルームの開設目的は知人用であると判定すると(ステップS55でYES)、変数Nの値が1を指示するか否かを判定する(ステップS57)。すなわち当該ルームの現在参加許容台数は1台であると判定すると(ステップS57でYES)、削除時間設定部426は、メモリ406の知人用テーブルATBL0を検索して、 “1”を指示するデータA0に対応のデータB0の値(5分)を読出し、データRMTBL[i].DELTMの値に、現在時刻+5分を設定する(ステップS61)。その後、処理はステップS71に移る。また、ステップS59において、現在参加許容台数は6台以上であると判定すると(ステップS59でYES)、処理は、前述したステップS65の処理に移る。
一方、6台未満と判定すると(ステップS59でNO)、削除時間設定部426は、知人用テーブルATBL0を検索し、2〜5を指示するデータA0に対応のデータB0の値(10分)を読出し、当該ルームの対応する変数RMTBL[i].DELTMの値を、現在時刻+10分に設定する(ステップS63)。その後、処理は、ステップS71に移る。
なお、ステップS61、S63およびS65における“現在時刻”は、計時部410が出力する現在時刻のデータを指す。
以上のように、削除時間設定部426は、ルームが新規に開設される毎に起動されて、当該ルームの開設目的と当該ルームの定員数に基づく現在参加許容台数とに従い、ルームを削除するべき日時のデータRMTBL[i].DELTMを可変に設定する。
<ルーム参加処理>
図29を参照して、ルーム参加受付部421Aによるルーム参加処理について説明する。
ルーム参加受付部421Aは、受信したルーム参加要求フレーム603のフレーム解析部424の解析結果に基づき、検索受付部421Bを介して、ルーム参加要求フレーム603のデータ622のルーム名に基づきルーム管理テーブルRMTBL[]を検索する。検索の結果、検索受付部421Bからの戻り値RTの値が‘ERROR’(エラー)を指示するか否かを判定する(ステップS75)。エラーを指示すると判定すると(ステップS75でYES)、すなわちルーム参加要求フレーム603によって参加が要求されたルーム名のルームは、ルーム管理テーブルRMTBL[]に開設されていないと判定すると、戻り値RTに‘ERROR’を設定し、図27の処理に戻る(ステップS77)。
戻り値RTがエラーを指示しないと判定すると(ステップS75でNO)、すなわち参加要求がされたルームはルーム管理テーブルRMTBL[]に開設されていると判定すると、参加受付部421Aは、変数iにステップS73の処理結果を示す戻り値、すなわち参加が要求されたルームのルーム管理テーブルRMTBL[]における記憶位置を示す値を設定し、変数Nに、変数RMTBL[i].NUM−変数RMTBL[i].ECNTの値を、すなわち現在参加許容台数を設定する(ステップS79)。
変数Nの値(現在参加許容台数)は0であると判定すると、すなわち参加が要求されたルームは定員一杯であることを判定すると(ステップ81でYES)、ステップS83において、戻り値RTを‘ERROR’に設定し、図27の処理に戻る。
一方、変数Nの値(現在参加許容台数)は0ではない、すなわち当該ルームは未だ定員一杯になっていないと判定すると(ステップS81でNO)、ステップS85において、変数Nの値を−1だけ更新するとともに、当該ルームへの新たな参加者を登録するために、データRMTBL[i].ECNTの値を、+1更新する(ステップS85)。
その後、ステップS89の処理において、参加受付部421Aは変数jの値を0に設定する。続いて、ステップS91、ステップS93およびステップS95のIPアドレスの格納処理を行なう。具体的には、変数jの値を+1ずつ更新しながら、当該ルームのデータRMTBL[i].IPA[j]を検索する。検索結果に基づき、まだ値が設定されていないデータRMTBL[i].IPA[j]を検出すると(ステップS91でYES)、検出したデータRMTBL[i].IPA[j]に、受信したルーム参加要求フレーム603から読出したデータ623が示すIPアドレスを設定し、対応するデータRMTBL[i].MA[j]に当該ルーム参加要求フレーム603から読出したデータ612が示すメールアドレスを設定する(ステップS99)。
その後、ステップS101において、削除時間設定部426が起動されて、削除時間設定処理(TMERSET1:ステップS101)が実行される。続いて、イベント通知部425の参加通知部425Aが起動されて、後述する参加通知処理(図32参照)が実行される(ステップS103)。
その後、参加受付部421Aは変数Nの値が0を指示し、かつ参加要求がされたルームの対応するデータRMTBL[i].APLの値が0を指示すると判定すると(ステップS105でYES)、ステップS107において当該ルームのデータRMTBL[i].FLAGの値を0に設定する(ステップS107)。一方、ステップS105の条件が成立しないと判定すると(ステップS105でNO)、ステップS107の処理をスキップして、戻り値RTに‘OK’(正常)を設定し(ステップS107)、図27の処理に戻る(ステップS109)。
上述のステップS105およびS107の処理により、参加要求を受付た結果、ルームが定員一杯となり、かつ当該ルームの開設目的が‘知人用’を指すと判定されると、すなわち、当該ルームに参加するべき知人のすべてに対してP2P通信のためのIPアドレスを配信(IPアドレスの交換)が完了したと判定して、当該ルームは削除される。
ステップS91、S93およびS95の処理に戻り、検索の結果、参加を要求したルームのデータRMTBL[i].IPA[j]には、値が設定されていないデータはないと判定されると(ステップS95でYES)、これは想定できない(致命的)エラーと判定し、戻り値RTに‘ERROR’を設定し、図27の処理に戻る(ステップS97)。
以上のように、ルームへの参加要求が発生し参加受付される毎に、削除時間設定部426により、参加受付けしたルームのデータRMTBL[i].DELTMが、当該ルームの開設目的および現在参加許容台数に応じて可変に設定される。
<ルーム脱退処理>
次に図30を参照して、脱退受付部421Cによるルーム脱退処理について説明する。脱退受付部421Cは、フレーム解析部424によるルーム脱退要求フレーム605の解析結果に基づき、検索受付部421Bを起動して、ルーム脱退要求フレーム605のデータ622が指すルーム名に基づきルーム管理テーブルRMTBL[]を検索する(ステップS111)。検索の結果を示す戻り値RTが“ERROR”を示すか否かを判定する(ステップS113)。‘ERROR’を指示すると判定すると、すなわち脱退が要求されたルームがルーム管理テーブルRMTBL[]に開設されていないと判定されると(ステップS113でYES)、戻り値RTを‘ERROR’に設定し、処理は図27に戻る(ステップS115)。
一方、戻り値RTが‘ERROR’を指示しない、すなわち脱退要求するルームのデータのルーム管理テーブルRMTBL[]における記憶位置を指示する値を示していると判定すると(ステップS113でNO)、脱退受付部421Cは変数iに戻り値RTを設定し、変数jを0に初期設定する(ステップS117)。
続いて、ステップS119、ステップS121およびステップS123の処理において、(j=10)の条件が成立するまで(ステップS123でYES)、変数jの値を+1ずつ更新しながら(ステップS121)、検索結果が示す脱退が要求されたルームのデータRMTBL[i].IPA[j]のうち、ルーム脱退要求フレーム605のデータ623が指示するIPアドレスに一致するもがあるか否かを判定する(ステップS119)。
(j=10)の条件が成立すると判定すると(ステップS123でYES)、すなわち脱退要求元の携帯電話100は当該ルームには参加していなかったと判定されると、戻り値RTを‘ERROR’に設定し、図27の処理に戻る(ステップS125)。
一方、IPアドレスと一致するデータRMTBL[i].IPA[j]が格納されていたと判定した場合には(ステップS119でYES)、ステップS127において、当該IPアドレスと一致するデータRMTBL[i].IPA[j]と、対応するデータRMTBL[i].MA[j]との値をNULLに設定する。これにより、脱退要求元の携帯電話100の、当該ルームからの脱退が完了する。
続いて、ステップS129において、(RMTBL[i].ECNT=RMTBL[i].ECNT−1)の演算処理を行うことにより、当該ルームから未だ脱退せずに現在も参加を続ける台数(以下、現在参加台数という)を1台減らす(ステップS129)。
続いて、脱退受付部421Cは、当該ルームのデータRMTBL[i].ECNTの値が0を指示するか否かを判定する(ステップS131)。0を指示すると判定すると、すなわち当該ルームから全員が脱退し、もはや参加している端末はないと判定すると(ステップS131でYES)、当該ルームの対応するデータRMTBL[i].FLAGの値を0に設定する(ステップS133)。これにより当該ルームはルーム管理テーブルRMTBL[]から削除される。その後、戻り値RTを‘OK’(正常)に設定し、図27の処理に戻る(ステップS135)。
一方、当該ルームには参加している端末が存在すると判定された場合には(ステップS131でNO)、脱退受付部421Cは削除時間設定部426を起動する。これにより、削除時間設定部426による削除時間設定処理が行なわれる。
削除時間設定部426は、まず当該ルームのデータRMTBL[i].APLが0を指示するか否かを判定する(ステップS137)。0を指示する、すなわち当該ルームの開設目的は知人用と判定すると、処理は後述する脱退通知処理(図33参照)に移行する(ステップS149)。その後、処理は戻り値RTを‘OK’(正常)に設定して、図27の処理に戻る(ステップS151)。
ステップS137の処理においてデータRMTBL[i].APLの値は0でないと判定されると、すなわち当該ルームの開設目的はコミュニティ用と判定されると(ステップS137でNO)、ステップS139において削除時間設定部426は、当該ルームのRMTBL[i].ECNTの値が指す現在参加台数が“1”を指示するか否かを判定する(ステップS139)。1台であると判定すると(ステップS139でYES)、削除時間設定部426は、ステップS137の判定結果に基づきコミュニティ用テーブルATBL1を検索し、当該ルームのデータRMTBL[i].ECNTが指す現在参加台数を示すデータA1に対応のデータB1(この場合、1分)を読出し、読出したデータと現在時刻とを加算した値を、当該ルームのデータRMTBL[i].DELTMに設定する(ステップS143)。その後、処理はステップS149に移行する。
一方、ステップS139において現在参加台数は1台ではないと判定されると(ステップS139でNO)、ステップS141において現在参加台数は6台以上であるか否かが判定される(ステップS141)。6台未満であると判定されると(ステップS141でNO)、削除時間設定部426は、検出した現在参加台数に基づきコミュニティ用テーブルATBL1を検索し、現在参加台数を指示するデータA1に対応のデータB1が指示する時間データ(この場合10分)を読出し、現在時刻+読出したデータの算出結果値を変数RMTBL[i].DELTMに設定する(ステップS145)。その後、処理はステップS149に移行する。
一方、現在参加台数は6台以上であると判定されると(ステップS141でYES)、ステップS147において、削除時間設定部426は、検出された台数に基づきコミュニティ用テーブルATBL1を検索し、現在参加台数を示すデータA1に対応のデータB1が示す時間データ(この場合、定数TMAX(たとえば30分))の値を読出し、読出した値と現在時刻とを加算した値を、変数RMTBL[i].DELTMに設定する(ステップS147)。その後、処理はステップS149に移行する。
ステップS143、S145およびS147で示す“現在時刻”のデータは計時部410が出力する現在時刻データによって指示される。
以上のように、ルームからの脱退要求が発生し受付される毎に、削除時間設定部426により、脱退を受付けたルームのデータRMTBL[i].DELTMが、現在参加台数およびルーム開設条件を指すパラメータである当該ルームの開設目的に応じて可変に設定される。
<ルーム検索処理>
次に、図31を参照して検索受付部421Bによるルーム検索処理について説明する。
検索受付部421Bは、検索が要求されたルームのルーム名を入力すると、当該ルーム名を指示するデータRMTBL[i].RMNMを有するルームデータRMTBL[i]が、ルーム管理テーブルRMTBL[]に格納されているか否かを検索する。なお、検索が要求されるルームは、受信した要求フレーム599、601、603および605のデータ622のルーム名により指示される。
具体的には、検索のための制御の変数jを0に設定する(ステップS155)。続いて、検索受付部421Bは、ルーム管理テーブルRMTBL[]を変数jの値を+1ずつ更新しながら(ステップS161)、変数jの値が定数MAXを指示すると判定されるまで(ステップS163でYES)、変数jの値が指示するルームデータRMTBL[j]について、データRMTBL[j].FLAGの値が“1”、すなわち当該ルームは削除されておらず有効に存在する(開設されている)か否かを判定する(ステップS157)。
有効に存在するルームを検出すると(ステップS157でYES)、当該ルームのデータRMTBL[j].RMNMは、検索が要求されたルーム名と照合されて、照合結果に基づき一致する否かを判定する(ステップS159)。一致しないと判定されると(ステップS159でNO)、処理はステップS157に戻り、要求されたルーム名を有するルームの検索処理が繰返される。
一方、一致すると判定されると(ステップS159でYES)、戻り値RTに変数jの値を設定し元の処理に戻る(ステップS165)。これにより、戻り値RTは、ルーム管理テーブルRMTBL[]における、検索要求されたルーム名のルームデータRMTBL[j]が格納されている位置を指示することになる。
有効に存在するルームを検出できなかった場合には(ステップS157でNO、ステップS163でYES)、検索要求されたルームはルーム管理テーブルRMTBL[]に格納されていないと判定されて、戻り値RTに‘ERROR’が設定されて、元の処理に戻る(ステップS167)。
<参加通知処理>
次に、図32を参照して、参加通知部425Aによる参加通知処理について説明する。参加通知部425Aは、参加要求を受付けたルームについて、当該ルームに既に参加していたすべての携帯電話100宛てに、図23に示すルーム参加端末発生の通知フレーム607を送信する。
具体的には、参加要求を受付けたルームに参加要求受付前から既に参加している携帯電話100の台数をカウントする変数jを+1ずつ更新しながら(ステップS171、S177)、(j=10)の条件の成立が検出されるまで(ステップS179でYES)、図23の通知フレーム607をフレーム生成部423を制御して生成し、生成したフレームをサーバ通信部409を介して当該参加端末宛に送信する(ステップS173、ステップS175)。送信後は図29の処理に戻る(ステップS180)。
ステップS175における通知フレームの生成を説明する。通知フレーム607は、参加端末毎に生成されて送信される。データ612として、ルーム管理テーブルRMTBL[]から読出したデータRMTBL[i].MA[j]が格納され、データ613として、マッチングサーバアドレスのデータMSADが格納され、命令コード621として、参加通知のコマンドMEM_APPENDが格納され、データ622として、ルーム管理テーブルRMTBL[]から読出したデータRMTBL[i].RMNMが格納され、データ623として、今回参加要求を受付けた携帯電話100のIPアドレスを指す図19のルーム参加要求フレーム603のデータ623が格納される。
このように、ルーム参加要求が発生して受付られる毎に、当該ルームに既に参加している他の携帯電話100のそれぞれは、図23の通知フレーム607を受信することにより、新たな参加端末のIPアドレスを取得することができる。
<脱退通知処理>
次に、図33を参照して、脱退通知部425Bによる脱退通知処理について説明する。脱退通知部425Bは、脱退要求を受付けたルームについて、当該ルームに参加しているすべての携帯電話100宛てに、図24に示すルーム脱退端末発生の通知フレーム608を送信する。
具体的には、脱退要求を受付けたルームに脱退要求受付後も参加している携帯電話100の台数をカウントする変数jを+1ずつ更新しながら(ステップS181、S187)、(j=10)の条件の成立が検出されるまで(ステップS189でYES)、図24の通知フレーム608をフレーム生成部423を制御して生成し、生成したフレームをサーバ通信部409を介して当該参加端末宛に送信する(ステップS183、S185)。送信後は、図30の処理に戻る(ステップS191)。
ステップS185における通知フレームの生成を説明する。通知フレーム608は、参加端末毎に生成されて送信される。データ612として、ルーム管理テーブルRMTBL[]から読出したデータRMTBL[i].MA[j]が格納され、データ613として、マッチングサーバアドレスのデータMSADが格納され、命令コード621として、参加通知のコマンドMEM_LEAVEが格納され、データ622として、ルーム管理テーブルRMTBL[]から読出したデータRMTBL[i].RMNMが格納され、データ623として、今回脱退要求を受付けた携帯電話100のIPアドレスを指すデータ(図21のルーム脱退要求フレーム605のデータ623)が格納される。
このように、ルーム脱退要求が発生して受付られる毎に、脱退要求受付後も当該ルームに参加している他の携帯電話100のそれぞれは、図24の通知フレーム608を受信することにより、脱退する端末のIPアドレスを取得することができる。
(プログラムおよび記録媒体)
ここで、本実施の形態における、図26〜図33のフローチャートに従う機能はプログラムとして提供することができる。このようなプログラムは、マッチングサーバ400のCPU405のコンピュータに付属する記録媒体に予め記録させて、プログラム製品として提供することもできる。このような記録媒体としては、FD(Flexible Disc)412、CD(Compact Disc)−ROM414またはメモリ406を構成するROM(Read Only Memory)およびRAM(Random Access Memory)、ならびにメモリカードなどのコンピュータ読取り可能な記録媒体がある。あるいは、コンピュータに内蔵する固定ディスク407の記録媒体にて記録させて、プログラムを提供することもできる。また、インターネット500を含む各種ネットワークを介したダウンロードによって、プログラムを提供することもできる。
また、携帯電話100の図25のフローチャートに従う機能もプログラムとして提供することができる。このようなプログラムは、携帯電話100のCPU106Aのコンピュータに付属する記録媒体に予め記録させて、プログラム製品として提供することもできる。このような記録媒体としては、FD(Flexible Disc)、CD(Compact Disc)−ROMまたは記憶部103を構成するROM(Read Only Memory)およびRAM(Random Access Memory)、ならびにメモリカードなどのコンピュータ読取り可能な記録媒体がある。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、インターネット500を含む各種ネットワークを介したダウンロードによって、プログラムを提供することもできる。
ここで、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。
なお、一般的傾向として、コンピュータのオペレーティングシステムの一部として様々なプログラムモジュールを用意しておき、アプリケーションプログラムはこれらモジュールを所定の配列で必要なときに呼出して処理を進める方式が一般的である。そうした場合、本実施の形態に係るシステムを実現するためのソフトウェア自体にはそうしたモジュールは含まれず、当該コンピュータでオペレーティングシステムと協働してはじめてシステムが実現することになる。しかし、一般的なプラットホームを使用する限り、そうしたモジュールを含ませたソフトウェアを流通させる必要はなく、それらモジュールを含まないソフトウェア自体およびそれらソフトウェアを記録した記録媒体(およびそれらソフトウェアがネットワーク上を流通する場合のデータ信号)が実施の形態を構成すると考えることができる。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され
、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
100 携帯電話、110C P2Pボタン、400 マッチングサーバ、420 ルーム開設部、421A 参加受付部、421B 検索受付部、421C 脱退受付部、422 ルーム削除部、425 イベント通知部、425A 参加通知部、425B 脱退通知部、426 削除時間設定部、627 ルーム開設目的のデータ、628 定員数のデータ、RMTBL[] ルーム管理テーブル、ATBL0 知人用テーブル、ATBL1 コミュニティ用テーブル。