<チャットシステムの構成>
図1は、本実施形態に係るチャットシステムの概要を示す模式図である。チャットシステムSYMは、複数のクライアント装置1A,1Bと、サーバ装置2とを備える。サーバ装置2は、複数のマッチングサーバ3A,3B,3Cと、メッセージサーバ4とを含む。各クライアント装置1と各マッチングサーバ3とメッセージサーバ4とは、インターネット30に接続され、インターネット30を介してデータ通信を行う。以下の説明において、これらのクライアント装置1A,1Bの各ユーザを、それぞれユーザA,Bと称する。クライアント装置1A,1Bについて、区別して記載する必要がない場合には、単にクライアント装置1と記載し、各クライアント装置やその各構成要素について区別して記載する必要がある場合には、各々符号の後ろにA,Bを付記する。同様に、マッチングサーバ3A,3B,3Cについても、区別して記載する必要がない場合には、単にマッチングサーバ3と記載し、各マッチングサーバやその各構成要素について区別して記載する必要がある場合には、各々符号の後ろにA,B,Cを付記する。クライアント端末1及びマッチングサーバ3の数は例示であり、上記に限定されるものではない。マッチングサーバ3とメッセージサーバ4とは、一つのサーバ装置2に含まれている必要はなく、個別に設けられていてもよい。
クライアント装置1は、一つのチャットルームを特定可能な参加要求情報を、チャットシステムSYSへのユーザからの参加要求に応じて生成する。また、チャットルームを特定可能な退室要求情報を、ユーザからの退室要求に応じて生成する。クライアント端末装置1は、参加要求情報の生成に応じて参加要求情報を送信し、退室要求情報の生成に応じて退室要求情報を送信する。
チャットシステムSYSへのユーザからの参加要求は、チャットルームの開設要求とチャットルームへの入室要求とを含む。この場合、クライアント装置1は、開設要求に応じた参加要求情報として設定要求情報を生成し、入室要求に応じた参加要求情報として入室要求情報を生成する。
マッチングサーバ3は、参加要求情報と退室要求情報とをそれぞれ受信する。マッチングサーバ3の記憶部17(図4に示す)には、クライアント装置1とチャットルームとが相互に関連付けて登録可能である。
マッチングサーバ3は、受信した参加要求情報によって特定される一つのチャットルームが記憶部17に登録されているとき、クライアント装置1をそのチャットルームに関連付けて記憶部17に登録する。また、受信した参加要求情報によって特定される一つのチャットルームが記憶部17に登録されていないとき、クライアント装置1とチャットルームとを相互に関連付けて記憶部17に登録する。
マッチングサーバ3は、クライアント装置1から設定要求情報を受信したときには、クライアント装置1とチャットルームとを相互に関連付けて記憶部17に登録する。クライアント装置1から入室要求情報を受信したときには、受信した入室要求情報によって特定されるチャットルームが記憶部17に登録されているか否かを判定し、当該チャットルームが記憶部17に登録されていると判定した場合は、クライアント装置1を当該チャットルームに関連付けて記憶部17に登録しする。当該チャットルームが記憶部17に登録されていないと判定した場合は、クライアント装置1と当該チャットルームとを相互に関連付けて記憶部17に登録する
マッチングサーバ3は、一つのチャットルームに対して関連付けて登録された複数のクライアント装置1間において、メッセージデータの送受信によるチャットの実行を制御する。
マッチングサーバ3は、退室要求情報を受信したとき、退室要求情報によって特定される一つのチャットルームに関連付けられたクライアント装置1の登録を抹消する。また、登録されている一つのチャットルームに対してクライアント装置1が全く登録されていないとき、当該一つのチャットルームの登録を抹消する。
すなわち、各マッチングサーバ3は、後述するチャット管理プログラムを実行することにより、クライアント装置1からの設定要求(参加要求)に応じてチャットルームを開設し、各クライアント装置1からの入室要求(入室要求)に応じてそのクライアント端末1のチャットルームへの入室(参加)を許可し、チャットルームに入室しているクライアント装置1間でのメッセージデータ(テキストデータ)の送受信を中継する。また、マッチングサーバ3は、開設中のチャットルームから全てのクライアント装置1が退室したときに当該チャットルームを消去する。さらに、マッチングサーバ3は、既に消去したチャットルームに対してクライアント装置1から入室要求を受けたときには、そのチャットルームを再度開設する。すなわち、各マッチングサーバ3には、1つ以上のクライアント装置1が入室しているアクティブなチャットルームのみが存在し、クライアント装置1が全く入室していないインアクティブなチャットルームは存在しない。なお、メッセージサーバ4も、クライアント装置1間でのメッセージデータ(テキストデータ)の送受信を中継するが、チャットルームへの入室を条件としていない点でマッチングサーバ3とはその機能が相違する。なお、以下の説明において、マッチングサーバ3に対して送受信するメッセージデータをチャットデータと称して、メッセージサーバ4に対して送受信するメッセージデータと区別する。
各クライアント装置1には、コントローラ20とモニタ装置10とがそれぞれ接続ケーブル19を介して接続される。コントローラ20は、ユーザによって操作される操作端末であり、ユーザからの操作に応じた操作信号をクライアント装置1に供給する。なお、コントローラ20は、ユーザの操作に応じた操作信号(入力信号)をクライアント装置1に供給可能な入力装置であればよく、キーボードタイプやゲーム用コントローラなど様々な種類のものが適用可能である。
モニタ装置10は、クライアント装置1から供給された映像信号に基づいて画像を表示する。チャットの開始時(チャットルームへの入室時)には、ルーム選択画面がモニタ装置10に表示される。ルーム選択画面には、ユーザが選択可能なチャットルームを示す画像が配列されて表示される。ユーザがチャットルームに入室してチャットを実行しているときには、そのチャットルームに対応したチャット画面が表示される。チャット画面は、ユーザからの指示に応じて表示状態と非表示状態とに切り替わる。チャット画面が非表示状態であり他の画面が表示されているときに、入室中のチャットルームに対する他のクライアント装置1の入室や退室が行われた場合や、他のクライアント装置1からのチャットデータが送信された場合等には、それらを報知するチャット情報報知画面が上記他の画面上に重ねて表示される。
<クライアント装置の主要構成>
次に、図2を参照しながら、クライアント装置の内部構成のうち本発明に関連する主要な構成について説明する。
クライアント装置1は、通信部80とチャット実行部13と表示制御部14と記憶部15とから構成され、これらはバスを介して接続される。クライアント装置1は、記憶部15に記憶されたチャット実行プログラムに従って、以下の各処理(開設要求処理、入室要求処理、退室要求処理、チャット実行処理、招待送信処理、招待受信処理、ルーム選択画面表示処理、チャット画面表示処理等)を実行する。以下の説明において、ユーザ特定情報とは、クライアント装置1を識別可能な固有の情報であり、記憶部15に記憶されている。ユーザ特定情報としては、例えばクライアント装置1のユーザに対して予め付与された固有のユーザID、クライアント装置1に対して予め付与された装置ID、ユーザのメールアドレスなどが用いられる。
記憶部15には、友人を登録するためのフレンド管理テーブルが設定されている。フレンド管理テーブルには、チャットシステムSYMを利用可能な他のユーザ(友人)のユーザ特定情報とユーザ属性情報とが、相互に関連付けられて記憶されている。ユーザがコントローラ20を操作して所定の入力を行うことにより、ユーザ特定情報がフレンド管理テーブルに登録される。ユーザ属性情報は、ユーザのメールアドレス、ユーザのニックネーム、ユーザによって選択されたアバターの画像データなどの情報を含む。
開設要求処理は、チャットルームの新規開設を指示する所定の操作入力をコントローラ20がユーザから受け付け、クライアント装置1がコントローラ20から操作信号(ルーム開設指示信号)を受信することによって実行される。開設要求処理は、サーバ決定処理とルーム情報決定処理とを含む。サーバ決定処理において、チャット実行部13は、予め定められた方法に従ってサーバ選択基礎情報(サーバキー)を決定し、複数のマッチングサーバ3A,3B,3Cのうちチャットルームを開設するマッチングサーバ3を、予め定められた所定の対応関係に従って、上記サーバ選択基礎情報から求めて決定する。ルーム特定情報決定処理において、チャット実行部13は、チャットルームに固有なルーム特定情報(ルームキー)を予め定められた所定の方法に従って決定する。
チャット実行部13は、自己のユーザ特定情報を含む開設要求情報を生成し、通信部80は、生成された開設要求情報を上記決定したマッチングサーバ3へ送信する。また、チャット実行部13は、上記決定されたルーム特定情報と自己のユーザ特定情報とを含む設定要求情報を生成し、通信部80は、生成された設定要求情報を上記決定したマッチングサーバ3へ送信する。開設要求処理は、開設されたチャットルームのルーム識別情報(ルームID)を通信部80がマッチングサーバ3から受信することによって終了する。
チャット実行部13は、上記決定されたルーム特定情報とサーバ選択基礎情報とを関連付けて記憶部15に記憶する。また、チャット実行部13は、チャットルームの開設情報を、チャット履歴情報としてルーム特定情報に関連付けて記憶する。チャットルームの開設情報は、チャットルームの開設日時を示す情報を含む。チャットルームの開設日時は、開設要求処理の実行開始時の他、開設要求処理の実行終了時(通信部80がマッチングサーバ3からルーム識別情報を受信した時)など、開設要求処理の実行時期を特定する日時であればよい。開設情報を記憶するタイミングは、開設要求処理の実行終了時が好ましい。なお、日や時刻を示す種々の情報は、クライアント装置1が自己の内部クロックから取得する。
サーバ選択基礎情報を決定する上記所定の方法とは、固有のサーバ選択基礎情報を決定可能な方法であればよく、例えば、ユーザ特定情報と開設要求処理を開始した時刻とを組み合わせた基礎データから、所定のハッシュ関数を用いてハッシュ値を演算する方法を用いることができる。この場合、演算によって得られたハッシュ値がサーバ選択基礎情報となる。ハッシュ値が演算される基礎データに時刻を組み合わせることにより、同じクライアント装置1において重複したサーバ選択基礎情報が生成されてしまう不都合を最大限に回避することができる。
チャットルームを開設する一つのマッチングサーバ3を複数のマッチングサーバ3A,3B,3Cから選択して決定する上記所定の対応関係とは、複数のマッチングサーバ3に対してチャットルームが均等に分散して割り振られる関係(マッチングサーバ3にそれぞれ付与された固有のサーバIDの一つと上記決定されたサーバ選択情報とが均等に対応する関係)であればよく、例えば、サーバ基準基礎情報(上記ハッシュ値)から一つのサーバIDがランダムに算出されるように設定されたハッシュ関数を用いることができる。この場合、チャットルームを開設するマッチングサーバ3のサーバIDは、サーバ基準基礎情報のハッシュ値として算出される。
チャットルームに固有なルーム特定情報を決定する上記所定の方法とは、固有のルーム特定情報を決定可能な方法であればよく、例えば、ユーザ特定情報とサーバIDとを組み合わせた基礎データから、所定のハッシュ関数を用いてハッシュ値を演算する方法を用いることができる。この場合、演算によって得られたハッシュ値がルーム特定情報となる。
なお、マッチングサーバ3を選択して決定するための上記所定の対応関係は、マッチングサーバ3の数の増減に応じて更新される。例えば、サーバ装置2の管理者等がマッチングサーバ3の数を増減すると、サーバ装置2は、増減後のサーバ数に適合した対応関係(新)を含むサーバ数更新情報を各クライアント装置1へ送信する。サーバ数更新情報を受信したクライアント装置1は、記憶されている対応関係(旧)を、受信した対応関係(新)に書き換える。
開設要求処理において、チャット実行部13は、開設するチャットルームのルーム名の入力をコントローラ20を介してユーザから受け付け、入力されたルーム名を、ルーム属性情報としてルーム特定情報に関連付けて記憶する。ユーザからルーム名が入力されない場合は、予め設定されたデフォルトのルーム名を記憶する。
入室要求処理は、チャットルームを指定し入室を指示する所定の操作をコントローラ20がユーザから受け付け、クライアント装置1がコントローラ20から操作信号(入室指示信号)を受信することによって実行される。入室要求処理において、チャット実行部13は、指定されたチャットルームに対応するサーバ選択基礎情報及びルーム特定情報を記憶部15から読み出し、上記開設要求処理の場合と同様に(読み出したサーバ選択基礎情報を用いて上記所定の方法に従って)、チャットルームが開設されたマッチングサーバ3を特定する。
チャット実行部13は、ユーザ特定情報と上記読み出したルーム特定情報とを含む入室要求情報を生成し、通信部80は、生成された入室要求情報を上記特定したマッチングサーバ3へ送信する。ルーム特定情報は、マッチングサーバ3においてチャットルームを検索するために用いられる。入室要求処理は、自己に対する入室完了情報をマッチングサーバ3から通信部80が受信することによって終了する。
一方、指定したチャットルームが既に消去されている場合には、マッチングサーバ3においてチャットルームが抽出されず、入室に失敗する。入室に失敗した場合、通信部80は、チャットルームへの入室に失敗した旨を示す入室失敗情報をマッチングサーバ3から受信する。通信部80が入室失敗情報を受信すると、上記開設要求処理に移行する。すなわち、チャット実行部13は、自己のユーザ特定情報を含む開設要求情報と、上記指定したチャットルームのルーム特定情報と自己のユーザ特定情報とを含む設定要求情報とを生成し、通信部80は、生成された開設要求情報及び設定要求情報を、上記入室要求情報を送信したマッチングサーバ3へ送信する。
チャット実行部13は、チャットルームに入室したことを示す入室情報(自己の入室情報)を、チャット履歴情報としてルーム特定情報に関連付けて記憶する。自己の入室情報は、チャットルームへの入室日時を示す情報を含む。チャットルームへの入室日時は、入室要求処理の実行開始時の他、入室要求処理の実行終了時(通信部80がマッチングサーバ3から自己の入室完了情報を受信した時)など、チャットルームへの入室時期を特定する日時であればよい。自己の入室情報を記憶するタイミングは、入室要求処理の実行終了時が好ましい。
また、本実施形態では、開設要求処理が終了すると、ユーザからの操作入力を要件とせずに入室要求処理が実行される。なお、この場合、開設要求処理においてチャットルームが既に特定されているため、マッチングサーバ3及びチャットルームを特定するための上記処理は省略可能である。また、入室要求処理は、複数のチャットルームに対してそれぞれ独立して実行される処理であり、クライアント装置1は、一のチャットルームへの入室を維持したままで、他のチャットルームに入室することができる。
退室要求処理は、チャットルームを指定し退室を指示する所定の操作をコントローラ20がユーザから受け付け、クライアント装置1がコントローラ20から操作信号(退室指示信号)を受信することによって実行される。退室要求処理において、チャット実行部13は、ユーザ特定情報及びサーバIDを含む退室要求情報を生成し、通信部80は、生成された退室要求情報をマッチングサーバ3へ送信する。退室要求処理は、自己に対する退室完了情報をマッチングサーバ3から通信部80が受信することによって終了する。
チャット実行部13は、チャットルームから退室したことを示す退室情報(自己の退室情報)を、チャット履歴情報としてルーム特定情報に関連付けて記憶する。自己の退室情報は、チャットルームからの退室日時を示す情報を含む。チャットルームからの退室日時及び退室情報を記憶するタイミングは、退室要求処理の実行開始時の他、退室要求処理の実行終了時や、通信部80がマッチングサーバ3から自己の退室完了情報を受信した時など、チャットルームからの退室時期を特定する日時であればよい。
チャット実行処理は、チャットルームへの入室している間(入室要求処理の終了から退室要求処理の終了までの間)、継続して実行される。チャット実行処理において、チャット実行部13は、コントローラ20からの操作信号に基づいてチャットデータを生成する。チャット実行部13は、コントローラ20を介したユーザからの送信指示に応じて、上記生成したチャットデータとユーザ特定情報とを含む送信データを生成し、通信部80は、入室中のチャットルームのうちユーザから指定されたチャットルーム(マッチングサーバ3)に対して、上記生成された送信データを送信する。
通信部80は、チャットルームへの他のクライアント装置1の入室を示す他人の入室完了情報、チャットルームからの他のクライアント装置1の退室を示す他人の退室完了情報、又はマッチングサーバ3から送信されたチャットデータ(受信チャットデータ)と、それぞれの実行主体を示すクライアント装置1のユーザ特定情報とを含む受信データを、マッチングサーバ3から受信する。
チャット実行部13は、通信部80が受信した他人の入室完了情報、他人の退室完了情報、及び受信チャットデータを示す受信メッセージ情報と、それぞれに対応するユーザ特定情報とを、チャット履歴情報としてルーム特定情報に関連付けて記憶する。記憶される他人の入室完了情報、他人の退室完了情報、及び受信メッセージ情報は、その受信日時を示す情報をそれぞれ含む。
招待送信処理は、他のユーザ(他のクライアント装置1)をチャットルームに招待するための所定の操作をコントローラ20がユーザから受け付け、クライアント装置1がコントローラ20から操作信号(招待指示信号)を受信することによって実行される。招待送信処理において、チャット実行部13は、ユーザから指定されたチャットルーム(ルーム特定情報)に関連付けられたサーバ選択基礎情報とルーム特定情報とルーム属性情報とを記憶部15から読み出し、チャットルームへ招待する旨を示すメッセージデータ、自己のユーザ特定情報、サーバ選択基礎情報、ルーム特定情報、及びルーム属性情報を含む招待情報を生成する。通信部80は、生成された招待情報を、上記指定した他のクライアント装置1に対してメッセージサーバ4を介して送信する。なお、招待情報を送信した他のクライアント装置1のユーザ特定情報を、ルーム属性情報又はチャット履歴情報としてルーム特定情報に関連付けて記憶してもよい。
招待受信処理は、通信部80がメッセージサーバ4を介して他のクライアント装置1から招待情報を受信することによって実行される。招待受信処理において、チャット実行部13は、通信部80が受信した招待情報に含まれているサーバ選択基礎情報とルーム特定情報とユーザ特定情報とルーム属性情報とを相互に関連付けて、記憶部15に記憶する。ユーザ特定情報は、ルーム属性情報として記憶される。
ルーム選択画面表示処理は、ルーム選択画面の表示を指示する所定の操作をコントローラ20がユーザから受け付けることによって実行される。ルーム選択画面表示処理において、表示制御部14は、ルーム選択画面をモニタ装置10に表示する。ルーム選択画面には、ユーザが選択可能なチャットルームを示す画像(ルーム対応画像)が配列されて表示される。各ルーム対応画像は、各チャットルーム(ルーム特定情報)に関連付けて記憶されたチャット履歴情報及びルーム属性情報のうち少なくとも一つの情報を含む。ユーザがコントローラ20を操作し、一つのチャットルーム(表示されたルーム対応画像の中の一つ)を選択して指定すると、指定したチャットルームに対する上記入室要求処理が実行される。
チャット画面表示処理は、ルーム選択画面が表示された状態で一つのチャットルームが選択され指定されることによって実行される。チャット画面表示処理において、表示制御部14は、チャット画面をモニタ装置10に表示する。チャット画面には、指定されたチャットルームに関連付けて記憶されたチャット履歴情報のうち最新の情報(日時が遅い情報)を含む少なくとも一部の情報と、ルーム属性情報のうち少なくともルーム名を含む一部の情報とが表示される。チャット履歴情報は、最新の情報から時系列に並べて表示される。
表示制御部14は、コントローラ20を介したユーザからの指示に応じて、チャット画面を表示状態と非表示状態とに切り替える。非表示状態が指示されると、チャット画面表示処理が一時的に中断され、チャット画面は表示されない。但し、チャット画面表示処理の終了ではなく一時的な中断であるため、表示状態への切り替え指示を受けると即時にチャット画面が表示される。
チャット画面が非表示状態に設定されて他の画面が表示されているときに、入室中のチャットルームのルーム属性情報が追加されると(ルーム属性情報がルーム特定情報に関連付けて新たに記憶されると)、表示制御部14は、追加されたルーム属性情報を報知するチャット情報報知画面を、上記他の画面上に重ねて表示する。
チャット画面表示処理は、上記退室要求処理の終了(チャットルームからの退室)によって終了する。
<クライアント装置の例示>
次に、図3を参照しながら、上記図2の構成が実装されたクライアント装置1の一例について説明する。
クライアント装置1は、中央演算処理装置(CPU:Central Processing Unit)41及びその周辺装置等からなる制御系40と、HDD(Hard Disc Drive)45と、フレームバッファ53に描画を行う画像処理装置(GPU:Graphics Processing Unit)52等からなるグラフィックシステム50と、楽音、効果音等を発生する音声処理装置(SPU:Sound Processing Unit)61等からなるサウンドシステム60と、アプリケーションプログラムが記録されている光ディスクの制御を行う光ディスク制御部70と、通信部80と、インターフェース部90と、上記の各部が接続されているバス等を備えて構成されている。CPU41はチャット実行部13及び表示制御部14として機能し、グラフィックシステム50は表示制御部14として機能する。
制御系40は、CPU41と、割り込み制御やダイレクトメモリアクセス(DMA:Direct Memory Access)転送の制御等を行う周辺装置制御部42と、RAM(Random Access Memory)からなるメインメモリ43と、ROM(Read Only Memory)44とを備えている。メインメモリ43は記憶部15として機能する。
ROM44には、クライアント装置1の各部を制御するためのオペレーティングシステム等のプログラムや、各種機能を実現させるためのアプリケーションプログラムが記憶されている。CPU41は、ROM44に記憶されているオペレーティングシステムをメインメモリ43に読み出し、読み出したオペレーティングシステムを実行することにより、このクライアント装置1の全体を制御する。
HDD45には、各種データや、チャットを実現させるためのプログラム(チャット実行プログラム)などの各種アプリケーションプログラムが記憶されている。CPU41は、HDD45に記憶されているチャット実行プログラムをメインメモリ43に読み出し、読み出したチャット実行プログラムを実行する。
サウンドシステム60は、制御系40の制御の下、音声信号を制御するSPU61と、音声再生の際の波形データ等が記録されるサウンドバッファ62と、SPU61によって発生される楽音、効果音等を出力するスピーカ63とを備えている。サウンドシステム60には、マイクロフォン12から出力された音声信号とボイス・ディテクト値とが入力される。サウンドシステム60は、入力された音声信号をデジタル変換し、音声コーデックにより符号化して通信部80に供給する。また、サウンドシステム60には、インターネット30を介して取得された音声データが、通信部80から供給される。サウンドシステム60は、当該音声データを音声コーデックにより復号し、アナログ変換して波形データを生成し、これをサウンドバッファ62に記録し、これをスピーカ63に供給する。
光ディスク制御部70は、光ディスクに記録されたプログラムやデータ等を再生する光ディスク装置71と、例えばエラー訂正符号(ECC:Error Correction Code)が付加されて記録されているプログラム、データ等を復号するデコーダ72と、光ディスク装置71からのデータを一時的に記憶することにより、光ディスクからのデータの読み出しを高速化するバッファ73とを備えている。上記のデコーダ72には、サブCPU74が接続されている。
インターフェース部90は、パラレルI/Oインターフェース(PIO)91と、シリアルI/Oインターフェース(SIO)92とを備えている。これらは、図示しないメモリカードとクライアント装置1とを接続するためのインターフェースである。
グラフィックシステム50は、ジオメトリトランスファエンジン(GTE:Geometry Transfer Engine)51と、GPU52と、フレームバッファ53と、画像エンコーダ・デコーダ54とを備えている。このグラフィックシステム50には、制御系40がHDD45から読み出した画像データやビデオカメラ11からの映像信号が供給される。
GTE51は、例えば複数の演算を並列に実行する並列演算機構を備え、上記CPU41からの演算要求に応じて座標変換、光源計算、行列あるいはベクトルなどの演算を高速に行う。そして、制御系40は、GTE51による演算結果に基づいて三角形や四角形などの基本的な単位図形(ポリゴン)の組み合わせとして3次元モデルを定義して3次元画像を描画するための各ポリゴンに対応する描画命令をGPU52に送る。
GPU52は、制御系40からの描画命令に従って、フレームバッファ53に対して多角形(ポリゴン)等の描画を行う。フレームバッファ53は、GPU52により描画された画像を記憶する。このフレームバッファ53は、いわゆるデュアルポートRAMからなり、GPU52からの描画あるいはメインメモリ43からの転送と、表示のための読み出しとを同時に行うことができる。また、このフレームバッファ53には、ビデオ出力として出力される表示領域の他に、GPU52がポリゴン等の描画を行う際に参照するカラールックアップテーブル(CLUT:Color Lock Up Table)が記憶されるCLUT領域と、描画時に座標変換されてGPU52によって描画されるポリゴン等の中に挿入(マッピング)される素材(テクスチャ)が記憶されるテクスチャ領域が設けられている。これらのCLUT領域とテクスチャ領域は、表示領域の変更等に従って動的に変更される。
画像エンコーダ・デコーダ54は、上記の制御系40からの制御により、静止画あるいは動画の画像の符号化及び復号化や、デジタル変換及びアナログ変換などの各種処理を行う。
通信部80は、制御系40の制御の下、インターネット30を介して、サーバ装置2を含む他の情報処理装置とのデータ通信を制御する。
<マッチングサーバの主要構成>
次に、図4を参照しながら、マッチングサーバ3の内部構成のうち本発明に関連する主要な構成について説明する。
マッチングサーバ3は、通信部240とチャット管理部16と記憶部17とから構成され、これらはバスを介して接続される。マッチングサーバ3は、記憶部17に記憶されたチャット管理プログラムに従って、以下の各処理(ルーム開設処理、入室処理、退室処理、チャット管理処理)を実行する。記憶部17には、ルーム情報記憶領域230aが設けられている。このルーム情報記憶領域230aは、ルーム特定情報とルーム識別情報とユーザ特定情報と少なくとも最新のチャットデータとが相互に関連付けられて記憶される領域である。本実施形態のルーム情報記憶領域230aは、各情報が登録されることによって相互に関連付けられるルーム情報登録テーブルによって構成されている。なお、クライアント装置1から受信する各情報に含まれるユーザ特定情報が送信先のアドレス情報として機能しない場合、記憶部17には、ユーザ特定情報と送信先のアドレス情報との対応関係が記憶されたアドレステーブルが予め設定され、マッチングサーバ3は、送信先のユーザ特定情報に対応するアドレス情報をアドレステーブルから読み出すことによって、クライアント装置1に対する送信処理を実行する。
ルーム開設処理は、通信部240がクライアント装置1から開設要求情報及び設定要求情報を受信することによって実行される。ルーム開設処理において、チャット管理部16は、通信部240が受信した開設要求情報に応じてチャットルームを開設する。このチャットルームの開設とは、ルーム情報登録テーブルに新規のチャットルームのための記憶領域を設定することである。チャットルームを開設すると、ルーム情報登録テーブルの上記設定した記憶領域に、通信部240が受信したルーム特定情報を登録する。このルーム特定情報の登録に際して、チャット管理部16は、生成したチャットルームをマッチングサーバ3内で識別するためのルーム特定情報をルーム識別情報に関連付けて登録し、通信部240は、上記開設要求を行ったクライアント装置1に対してルーム識別情報を送信する。チャットルームに入室中のクライアント装置1は、マッチングサーバ3内におけるチャットルームの宛先としてルーム識別情報を用いる。
入室処理は、通信部240がクライアント装置1から入室要求情報を受信することによって実行される。入室処理において、チャット管理部16は、通信部240が受信したルーム特定情報がルーム情報登録テーブルに登録されているか否かを検索する(存在するか否かを判定する)。ルーム特定情報が登録されている場合(ルーム特定情報を抽出した場合)、チャット管理部16は、通信部240が受信したユーザ特定情報を、抽出したルーム特定情報に対応付けてルーム情報登録テーブルに登録する。ユーザ特定情報の登録によって、クライアント装置1がチャットルームに入室した状態となる。チャット管理部16は、入室完了情報を生成し、通信部240は、生成された入室完了情報を、そのチャットルームに関連付けて登録されている全てのクライアント装置1(入室要求を行ったクライアント装置1を含む)に対して送信する。
一方、ルーム特定情報が登録されてない場合(ルーム特定情報を抽出できなかった場合)、チャット管理部16は、入室失敗情報を生成し、通信部240は、生成された入室失敗情報をクライアント装置1へ送信する。続いて、通信部240はクライアント装置1から開設要求情報及び設定要求情報を受信し、チャット管理部16は、上記ルーム開設処理を実行する。
退室処理は、通信部240がクライアント装置1から退室要求情報を受信することによって実行される。退室処理において、チャット管理部16は、退室要求情報に含まれたルームIDに関連付けられているユーザ特定情報の中から、受信したユーザ特定情報を抽出して消去する。ユーザ特定情報の消去によって、クライアント装置1がチャットルームから退室した状態となる。チャット管理部16は、退室完了情報を生成し、通信部240は、生成された退室完了情報を、そのチャットルームに関連付けて登録されている全てのクライアント装置1(退室要求を行ったクライアント装置1を含む)に対して送信する。
また、チャットルームから全てのクライアント装置1が退室すると(登録されたルーム特定情報に関連付けられたユーザ特定情報が全て消去されると)、チャット管理部16は、そのチャットルーム(ルーム特定情報)に関する全ての情報(ルーム特定情報とこれに関連付けて記憶された全てのデータ)を、ルーム情報登録テーブルから消去する。関連する全ての情報の消去によって、チャットルームが消去された状態となる。
チャット管理処理は、ルーム情報登録テーブルにルーム特定情報が登録されている間(チャットルームに入室中のクライアント装置1が存在している間)、継続して実行される。チャット管理処理において、そのチャットルームに対応するルーム特定情報を含む送信データを通信部240がクライアント装置1から受信すると、チャット管理部16は、通信部240が受信したルーム特定情報に関連付けられて登録されたユーザ特定情報に関連付けられた全てのクライアント装置1に対して、上記送信データを送信する。なお、チャット管理部16は、上記受信した送信データをそのまま転送せず、送信データに含まれるメッセージデータに不適切な表現や文章が含まれていないか否かを判定し、不適切な表現や文章が含まれていると判定した場合には、該当する部分を無関係な文字や記号(例えばxなど)に置換して、クライアント装置1に送信してもよい。
<マッチングサーバの例示>
次に、図5を参照しながら、上記図4の構成が実装されたマッチングサーバ3の一例について説明する。
マッチングサーバ3は、CPU200、ROM210、RAM220、HDD(Hard Disc Drive)230、通信部240等から構成され、これらはバスを介して接続される。CPU200は、チャット管理部16として機能し、RAM220及びHDD230は記憶部15として機能する。
ROM210には、サーバ装置2の各部を制御するためのオペレーティングシステムや各種プログラムが記憶されている。CPU200は、サーバ装置2の起動時にROM210に記憶されているオペレーティングシステムをRAM210に読み出し、読み出したオペレーティングシステムを実行することにより、サーバ装置2の各部の動作を制御する。
HDD230には、各種データや、チャットを実現させるためのプログラム(チャット管理プログラム)などの各種アプリケーションプログラムが記憶されている。CPU200は、HDD230に記憶されているチャット管理プログラムをRAM220に読み出し、読み出したチャット管理プログラムを実行する。
通信部240は、CPU200の制御の下、インターネット30を介したデータ通信を制御する。
<メッセージサーバの構成>
メッセージサーバ4は、CPUと、ROMと、RAMと、HDD(Hard Disc Drive)と、通信部、バス等を有し、基本的な構成はマッチングサーバ3と同様であるため、その詳しい説明は省略する。
(2)動作
次に、チャットシステムSYSにおいて実行される動作の一例を説明する。
クライアント装置1では、図示しない電源が投入され、ROM44に記憶されたオペレーティングシステムなどのプログラムがCPU41によってメインメモリ43に読み出されて実行され、ユーザによってそれぞれ指示が入力されることにより、ROM44や光ディスク装置71に装着された光ディスクからメインメモリ43に読み出された各種プログラムがCPU41によって実行され、上述の構成欄で述べた各種機能が実現される。
マッチングサーバ3では、図示しない電源が投入され、ROM210に記憶されたオペレーティングシステムなどの各種プログラムがCPU200によってRAM220に読み出されて実行されることにより、上述の構成欄で述べた各種機能が実現される。なお、メッセージサーバについても同様である。
チャットシステムSYSを利用してチャットを開始する場合、ユーザは、(1)自分でチャットルームを開設して他のユーザを招待すること、及び(2)他人から招待されたチャットルームに入室することが可能である。
以下の説明は、クライアント装置20AのユーザAがチャットルームを開設し、そのチャットルームにクライアント装置20BのユーザBを招待する場合、及び招待されたユーザBがチャットルームに入室(チャットに参加)する場合の動作であり、各種設定は、以下のとおりである。ユーザ特定情報は、ユーザIDである。サーバキー(サーバ選択基礎情報)は、ユーザIDと開設要求処理の開始時刻との組み合わせから算出したハッシュ値である。チャットルームを開設するマッチングサーバ3のサーバIDは、サーバキーのハッシュ値として算出される。ルームキー(ルーム特定情報)は、時刻(例えば、上記開設要求処理の開始時刻)とマッチングサーバ3から受信したルームIDとの組み合わせである。
<チャットルームの開設・友人の招待>
ユーザAがチャットルームRAを新規に開設する場合のクライアント装置20A及びマッチングサーバ3の動作を、図6〜図9を参照して説明する。
図6に示すように、ユーザAがコントローラ20Aを操作してチャットルームRAの新規開設を指示する所定の入力を行い、クライアント装置1Aがコントローラ20からルーム開設指示信号を受信すると(ステップS10)、クライアント装置1Aが開設要求処理を開始する。
開設要求処理では、クライアント装置1Aの内部クロックからルーム開設指示信号の受信時刻Taを取得し、記憶部15AからユーザAのユーザID(A)を読み出し、ユーザID(A)の文字列と時刻Taの文字列とを連結することによって基礎データ(ユーザID(A) Ta)を生成し、予め設定されたハッシュ関数(hashA)を用いて、基礎データ(ユーザID(A) Ta)からハッシュ値(hashA(ユーザID(A) Ta))を演算する(ステップS11)。このハッシュ値(hashA(ユーザID(A) Ta))は、複数のマッチングサーバ3から一つのマッチングサーバ3を偏り無く選択する際に使用可能なサーバキーSKaとして機能する。
次に、予め設定されたハッシュ関数(hashB)を用いて、サーバキーSKaのハッシュ値(hashB(SKa))を演算する(ステップS12)。このハッシュ値(hashB(SKa))は、複数のマッチングサーバ3から偏り無く選択された一つのマッチングサーバ3のサーバIDである。この例では、算出されたサーバID(A)がマッチングサーバ3AのサーバIDであり、マッチングサーバ3Aが選択されたとする。
次に、ユーザID(A)を含む開設要求情報をマッチングサーバ3Aへ送信する(ステップS13)。
マッチングサーバ3Aは、開設要求情報の受信に応じて(ステップS20)、ルーム開設処理を実行する(ステップS21)。ルーム開設処理では、ルームIDを生成し、生成したルームIDをルーム情報登録テーブルに新規に登録する。マッチングサーバ3Aは、生成したルームIDを、クライアント装置1Aへ送信する(ステップS22)。この際、クライアント装置1A側において上記開設要求情報に対応したルームIDであることが判別可能なように、ルームIDを受信した開設要求情報に対応付けた状態で送信する。
ルームIDを受信したクライアント装置1Aは、受信したルームIDと時刻とを組み合わせることにより、チャットルームRAに固有なルームキーRKaを設定する(ステップS15)。
次に、ルームキーRKa及びルームIDを含む設定要求情報をマッチングサーバ3Aへ送信する(ステップS15)。
マッチングサーバ3Aは、設定要求情報を受信すると(ステップS16)、受信した設定要求情報に含まれるルームキーRKaを、開設したチャットルームRA(受信した設定要求情報に含まれるルームID)に関連付けてルーム情報登録テーブルに登録する(ステップS17)。これにより、マッチングサーバ3AにおけるチャットルームRAの開設(上記開設処理及び登録処理)が完了し、マッチングサーバ3Aは、開設完了情報を生成してルームIDに関連付けてクライアント装置1Aに送信する(ステップS18)。
クライアント装置1Aは、開設完了情報の受信により開設要求処理を終了する(ステップS19)。
クライアント装置1Aは、開設要求処理に続いて入室要求処理を実行し、チャットルームRAへ入室する。なお、入出要求処理の詳細については後述する。
クライアント装置1Aは、ステップS11で算出したサーバキーSKaとステップS14で設定したルームキーRKaとを、相互に関連付けて記憶部15に記憶する。また、チャットルームRAの開設日時を示す情報をルームキーRKaに関連付けて記憶する。
また、開設要求処理において、クライアント装置1Aは、例えば図7に示すように、チャットルームRAのルーム名入力画面100をモニタ装置10Aに表示させる。ルーム名入力画面100には、「チャットルーム名を入力してください」などの文章101と、ルーム名入力欄102と、確定アイコン103とが表示される。ユーザAがコントローラ10Aを操作してルーム入力欄102にカーソルを設定してルーム名を入力し、確定アイコン103にカーソルを移動させて所定のYESボタンを押すと、クライアント装置1Aは、入力されたルーム名をルームキーRKaに関連付けて記憶する。なお、ユーザAがルーム名を入力せずに、確定アイコン103にカーソルを設定してYESボタンを押すと、クライアント装置1Aはデフォルトのルーム名を記憶する。
ルーム名の入力が完了すると、クライアント装置1Aは、モニタ装置10Aの表示を、ルーム名入力画面100から、例えば図8に示すような招待者選択画面110に切り替える。招待者選択画面110には、「招待する友人を選んでください」などの文章111と、友人として登録された各ユーザのニックネーム(はな子、タロー、次郎、ポチなど)112と、各ユーザのアバター113と、選択の有無を入力するチェックボックス114と、選択された合計人数を示す人数表示欄115と、確定アイコン116とが表示される。ニックネーム112とアバター113とは、記憶部15Aのフレンド管理テーブルから読み出され、各ユーザ毎に横並びに配置される。チェックボックス114は、ユーザに対して1つずつ設けられ、デフォルトは矩形枠状(中抜き)の非選択表示である。ユーザAがコントローラ10Aを操作してカーソルを上下に移動させ、所望のユーザにカーソルを設定してYESボタンを押すと、対応するチェックボックス114の表示が切り替わる。非選択表示の場合には、選択表示(例えば、塗り潰された状態)に切り替わり、選択表示の場合には、非選択表示に切り替わる。人数表示欄115には、招待者として選択しているユーザの数が、各チェックボックス114の選択/非選択の切り替えに応じて増減して表示される。図8は、ニックネーム「タロー」のみが選択され、「人数表示欄」の「1」の数字が表示された状態を示している。ユーザAがチャットルームRAに招待したい1人以上のユーザを選択し(対応するチェックボックス114を選択態様に変更し)、確定アイコン1116にカーソルを設定してYESボタンを押すと、コントローラ20Aからクライアント装置1Aへ招待指示信号が送信される。招待指示信号を受信したクライアント装置1Aは、招待状の送信指示があったと判断し、招待対象のユーザを確定させて、招待送信処理を開始する。この例では、ユーザBが招待対象として確定したとする。
招待送信処理を開始すると、クライアント装置1Aは、図9に示すように、ユーザAから指定されたチャットルーム(ルーム特定情報)に関連付けられたサーバキー、ルームキー、及びルーム名を記憶部15から読み出す(ステップS30)。チャットルーム開設時の招待発信処理では、開設を要求しているチャットルームRAがユーザAから指定されたチャットルームとなり、サーバキーSKa(図6のステップS11)とルームキーRKa(図6のステップS14)及び入力されたルーム名を読み出す。
次に、クライアント装置1Aは、チャットルームRAへ招待する旨を示すメッセージデータ、自己のユーザID(A)、読み出したサーバキーSKaとルームキーRKaとルーム名を含む招待情報を生成し、生成した招待情報を、クライアント装置Bを宛先としてメッセージサーバ4へ送信する(ステップS31)。
メッセージサーバ4は、クライアント装置1Aから招待情報を受信すると、これをクライアント装置1Bへ送信する(ステップS32)。
クライアント装置1Bは、招待情報を受信し(ステップS33)、招待受信処理を実行する。すなわち、受信した招待情報に含まれているサーバキーSKaとルームキーRKaとユーザID(A)とルーム名とを相互に関連付けて、記憶部15Bに記憶する(ステップS34)。
<チャットルームへの入室>
ユーザBがチャットルームRAに入室する場合のクライアント装置20B及びマッチングサーバ3の動作を、図10及び図11を参照して説明する。
ユーザAから招待されたチャットルームRAへ入室する場合、ユーザBは、自己が入室可能なチャットルームの中からチャットルームRAを選択して指定するため、コントローラ20Bを操作して所定の入力を行い、図10に示すようなルーム選択画面120をモニタ装置10Bに表示させる。
ルーム選択画面120には、ユーザBが選択可能なチャットルームを示すルーム対応画像121が縦方向に配列されて表示される。ルーム対応画像121は、そのチャットルームに関連付けられたルーム属性情報又はチャット履歴情報に基づいて分類され、且つソートされている。
図10の例では、5つのチャットルームが選択可能な状態であり、5つのルーム対応画像121a〜121eが上下方向に並んでいる。ルーム対応画像121は、現在入室中(参加中)のチャットルームのルーム対応画像121a,121bと、招待されたが一度も入室していない新着のチャットルームのルーム対応画像121c,121dと、過去に入室したことがあるが現在は入室していない退室中のチャットルーム121eとに分類され、入室中、新着、退室中の順に上方から下方に並んでいる。
各ルーム対応画像121a〜121eには、ルーム名(「映画の部屋」、「待合室」、「おしゃべり用」、「ゲームしながら話そう」、「パズル同好会」)と、ニックネーム(次郎、ポチ、イチロー、はな子、次郎)がそれぞれ含まれる。ルーム対応画像121a,121bには現在入室中であることを示す入室中表示画像122が、ルーム対応画像121c〜121eには現在退室中であることを示す退室中表示画像123がそれぞれ含まれる。退室中のルームのうち新着ルーム(他のユーザから招待されて未だ一度も入室していないルーム)のルーム対応画像121cの場合、新着であることを示す新着表示画像124が退室中表示画像123に付されて表示される。なお、これらの表示画像122〜124は、対応するルームが現在入室中であるか、退室中で且つ新着(未入室)であるか、或いは退室中で過去に入室したことがあるかを識別可能に表示するものであれば、上記に限定されない。
現在入室中のルーム対応画像121a,121bには、最終発言者(クライアント装置1Bがマッチングサーバ3から最後に受信したチャットデータ(最新のチャットデータ)の送信元のユーザ)のアバター125と、最終発言者の発言内容(クライアント装置1Bがマッチングサーバ3から最後に受信したチャットデータ(最新のチャットデータ))とがそれぞれ含まれる。最終発言者がユーザB(自己)の場合、ユーザBが予め記憶部15に登録した自己のアバターの画像データが読み出され、最終発言者のアバター125として表示され、クライアント装置1Bがマッチングサーバ3から最後に受信した自己からのチャットデータ(ユーザBの発言内容)が、最終発言者の発言内容として表示される。
ルーム対応画像121c〜121eには、招待者(招待情報を送信したユーザ)のアバター126,127がそれぞれ含まれる。招待者が自己(ユーザB)の友人として登録されている場合(招待者のユーザIDが記憶部15Bのフレンド管理テーブルに記憶されている場合)、招待者のユーザIDに対応するアバターの画像データがフレンド管理テーブルから読み出され、招待者のアバター126,127として表示される。自己のフレンド管理テーブルに登録されていないユーザから招待された新着ルームの場合、チャットシステムSYSを利用するユーザのユーザIDとアバターの画像データ及びニックネームとの対応関係が登録されたユーザ情報登録テーブルが、インターネット上の記憶部(例えばマッチングサーバ3の記憶部17)に予め設定され、招待者のユーザIDに対応するアバターの画像情報やニックネームがネットワークを介してユーザ登録テーブルから取得され、招待者のアバター126やニックネームとして表示される。自己(ユーザB)が開設したルームの場合には、ユーザBのアバター及びニックネームが招待者のアバター127及びニックネームとして表示される。なお、一度設定されたユーザIDとアバターの画像データやニックネームとの対応関係は、チャット画面表示処理のために記憶部15Bに記憶される。
また、ルーム対応画像121a,121bにカーソルを合わせると最終発言日時が表示され、ルーム対応画像121c,121dにカーソルを合わせると招待情報の受信日時が表示され、ルーム対応画像121eにカーソルを合わせると最終退室日時が表示される。
ユーザBがルーム選択画面120に表示されたルーム対応画像121から所望の一つを選択し、選択したルーム対応画像121にカーソルを移動させてYESボタンを押すことにより、チャットルームの選択が確定し、コントローラ20Bからクライアント装置1Bに入室指示信号が送信される。この例では、チャットルームRAが選択されたとする。
図11に示すように、クライアント装置1Bは、入室指示信号を受信することによって入室要求処理を開始し(ステップS40)、チャットルームRAに対応するサーバキーSKaとびルームキーRKaとを記憶部15Bから読み出し(ステップS41)、上記開設要求処理の場合(図6のステップS12)と同様に、サーバキーSKaを用いてサーバIDを算出して、入室を要求するマッチングサーバ3を特定する(ステップS42)。この場合、サーバキーSKaを用いているので、図6のステップS12と同様にサーバID(A)が算出される。
次に、クライアント装置10Bは、自己のユーザID(B)とルームキーRKaとを含む入室要求情報を生成し、これをサーバID(A)に対応するマッチングサーバ3Aへ送信する(ステップS43)。
マッチングサーバ3Aは、入室要求情報を受信することによって、入室処理を開始する(ステップS44)。入室処理では、まず、受信した入室要求情報に含まれるルームキーRKaがルーム情報登録テーブルに登録されているか否か(チャットルームRAが存在するか否か)を判定する(ステップS45)。
登録されていると判定した場合(ルームキーRKaを抽出した場合)、入室処理が実行可能であるため、ユーザID(B)をルームキーRKaに対応付けてルーム情報登録テーブルに登録する(ステップS46)。ユーザID(B)の登録によって、クライアント装置1BがチャットルームRAに入室した状態となり、チャットルームRaに関連付けて登録されている全てのクライアント装置1(クライアント装置1Bを含む)に対して入室完了情報を送信する(ステップS47)。
クライアント装置1Bは、自己に対する入室完了情報をマッチングサーバ3から受信することによって、入室要求処理を終了する(ステップS48)。
一方、チャットルームRAが既に消去されている等の理由により、ステップS45においてルームキーRKaが登録されてないと判定した場合(ルームキーRKaを抽出できなかった場合)、入室失敗情報をクライアント装置1Bへ送信する(ステップS49)。
入室失敗情報を受信したクライアント装置1Bは、上記開設要求処理に移行する。すなわち、自己のユーザID(B)を含む開設要求情報と、チャットルームRAのルームRKaと自己のユーザID(B)とを含む設定要求情報とを、マッチングサーバ3Aへ送信すする。これにより、マッチングサーバ3AにチャットルームRAが開設され、そのチャットルームRAにクライアント装置1Bが入室する。
クライアント装置1Bは、チャットルームRAに入室している間(入室要求処理の終了から退室要求処理の終了までの間)、チャットルームRAに対するチャット実行処理を継続して実行する。クライアント装置1Bは、コントローラ20Bからの操作信号に基づいてチャットデータを生成し、コントローラ20Bを介したユーザからの送信指示に応じて、生成したチャットデータとユーザID(B)とを含む送信データを生成し、マッチングサーバ3AのチャットルームRAに対して、生成した送信データを送信する。
また、クライアント装置1Bは、チャットルームRAへの他のクライアント装置1の入室を示す他人の入室完了情報、チャットルームRAからの他のクライアント装置1の退室を示す他人の退室完了情報、又はマッチングサーバ3Aから送信されたチャットデータ(受信チャットデータ)と、それぞれの実行主体を示すクライアント装置1のユーザIDとを含む受信データを、マッチングサーバ3から受信する。クライアント装置1Bは、受信した他人の入室完了情報、他人の退室完了情報、及び受信チャットデータを示す受信メッセージ情報と、それぞれに対応するユーザIDとを、チャット履歴情報としてルーム特定情報に関連付けて記憶する。記憶される他人の入室完了情報、他人の退室完了情報、及び受信メッセージ情報は、その受信日時を示す情報をそれぞれ含む。
また、チャットルームRAに入室中のクライアント装置1Bは、例えばユーザBがチャットを実行している間、チャット画面表示処理を実行し、図12に示すようなチャット画面130をモニタ装置10Bに表示する。
チャット画面130には、チャットルームRAに関連付けて記憶されたチャット履歴情報のうち最新の情報(受信日時が遅い情報)を含む少なくとも一部の情報と、ルーム属性情報のうち少なくともルーム名を含む一部の情報とが表示される。チャット履歴情報は、最新の情報から時系列に並べて表示される。
図12に示す例のチャット画面130は、ルーム名(映画の部屋)が表示されるルーム名表示欄132、発言者(チャットデータを送信したユーザ)のアバターとニックネームと発言内容(受信したチャットデータ)とが、発言時(受信時刻)を基準に時系列で並んで表示される発言表示欄133、ユーザBが発言を書き込む(チャットデータを入力する)発言入力欄134、入室中のユーザの人数を示す人数表示欄135、発言表示欄133をスクロールさせるためのスクロールバー136、フレンドリスト表示用のアイコン137、及び参加者リスト表示用のアイコン138が含まれる。
フレンドリスト表示用のアイコン137にカーソルを移動させてYESボタンを押すと、図8に示す招待者選択画面110と同様の画面が表示され、所定の操作入力を行うことによって、当該チャットルームに他のユーザを招待することができる。また、参加者リスト表示用のアイコン138にカーソルを移動させてYESボタンを押すと、当該チャットルームに入室(参加)している全てのユーザのリスト(例えば、ニックネームとアバターのリスト)が表示される。
チャット画面130は、コントローラ20を介したユーザからの指示に応じて表示状態と非表示状態とに切り替わり、非表示状態が指示されると、チャット画面表示処理が一時的に中断され、チャット画面130は表示されない。
チャット画面130が非表示状態に設定されて他の画面が表示されているとき(例えば、ゲームの実行中であり、そのゲーム画面が表示されているとき)に、入室中のチャットルームのルーム属性情報が追加されると(ルーム属性情報がルーム特定情報に関連付けて新たに記憶されると)、追加されたルーム属性情報を報知するチャット情報報知画面が、ゲーム画面上に重ねて表示される。
例えば、図13に示すように、「待合室」というルーム名のチャットルームに入室し、チャット画面を非表示状態に設定し、ゲーム画面140を表示しているときに、「待合室」に対して、ニックネーム「ポチ」さんが「了解です」と発言したとき(「了解です」というメッセージデータを、ニックネーム「ポチ」さんに対応するユーザIDに関連付けられて受信したとき)、これらの情報を含むチャット情報報知画面141が表示される。また、ニックネーム「はな子」さんが「待合室」に入室したとき、「はな子さんが待合室に参加しました」という文章を含むチャット情報報知画面が表示される。なお、チャット情報報知画面141を表示する範囲及び位置は、ゲームの実行に支障がないように、可能な限り狭く且つゲーム画像140の周縁の近くであることが好ましい。
<チャットルームからの退室>
ユーザBがチャットルームRAから退室する場合のクライアント装置20B及びマッチングサーバ3の動作を説明する。
ユーザBが、コントローラ20Bを操作することによりチャットルームRAを指定し退室を指示すると、クライアント装置1Bは、コントローラ20Bから退室指示信号を受信し、退室要求処理を開始する。退室要求処理では、ユーザID(B)及びサーバIDを含む退室要求情報をマッチングサーバ3Aへ送信する。
退室要求情報を受信したマッチングサーバ3Aは、退室処理を開始する。退室処理において、マッチングサーバ3Aは、受信した退室要求情報に含まれるルームIDに関連付けて登録されているユーザIDの中から、受信したユーザID(B)を抽出して消去する。ユーザID(B)の消去によって、クライアント装置1BがチャットルームRAから退室した状態となる。そして、マッチングサーバ3Aは、退室完了情報を、チャットルームRAに関連付けて登録されている全てのクライアント装置1(退室要求を行ったクライアント装置1Bを含む)に対して送信する。
チャットルームRAから全てのクライアント装置1が退室すると(チャットルームRAに関連付けて登録されたユーザIDが全て消去されると)、マッチングサーバ3Aは、チャットルームRAに関する全ての情報(ルームキーRKaとこれに関連付けて記憶された全てのデータ)を、ルーム情報登録テーブルから消去する。関連する全ての情報の消去によって、チャットルームRKaが消去された状態となる。
クライアント装置1Bにおける退室要求処理は、自己に対する退室完了情報をマッチングサーバ3Aから受信することによって終了する。
以上説明したように、マッチングサーバ3は、開設中のチャットルームから全てのクライアント装置1が退室したときに当該チャットルームを消去する。また、マッチングサーバ3は、既に消去したチャットルームに対してクライアント装置1から入室要求を受けたときには、そのチャットルームを再度開設する。
すなわち、各マッチングサーバ3には、1つ以上のクライアント装置1が入室しているアクティブなチャットルームのみが存在し、クライアント装置1が全く入室していないインアクティブなチャットルームは存在しないことになる。
従って、インアクティブな状態のチャットルームの存在によってマッチングサーバ3の記憶部15の残容量が圧迫されてしまうことがなく、記憶部15に必要な記憶容量を最小限に抑えることができ、記憶部15の効率的な利用が可能となる。
クライアント装置1がチャットルームへの入室を要求した際にそのチャットルームが消去されている場合には、チャットルームが消去されていることがユーザに全く報知されないまま、クライアント装置1は、入室要求処理に続けて開設要求処理を実行し、マッチングサーバ3にチャットルームを開設して入室する。従って、チャットシステムSYSを利用するユーザに対して、違和感を与えることがない。
チャットルームから退室中の各クライアント装置1は、そのチャットルームが存在するマッチングサーバ3のサーバIDをサーバキーのハッシュ値として算出し、その算出に使用するサーバIDとハッシュ関数とは、各クライアント装置1の間で同一である。また、ハッシュ関数は、複数のマッチングサーバ3が偏り無く選択されるように設定され、マッチングサーバ3の増減に応じて適宜更新される。すなわち、チャットルームから全てのクライアント装置1が退室している間に、マッチングサーバ3が増設され、上記ハッシュ関数が更新され、算出されるサーバIDが変更されてしまう場合であっても、各クライアント装置1において算出されるサーバIDは、全て同じマッチングサーバ3に対応するように変更される。従って、マッチングサーバ3の増設後のサーバ負荷の分散を効率よく行うことができる。
チャットの開始時(チャットルームへの入室時)には、ルーム選択画面120がモニタ装置10に表示される。ルーム選択画面120には、選択可能なチャットルームを示すルーム対応画像121が配列表示され、各ルーム対応画像121は、各チャットルームに関連付けて記憶されたチャット履歴情報及びルーム属性情報のうち少なくとも一つの情報を含む。従って、ユーザは、入室可能な各チャットルームの内容を容易に把握して、所望のチャットルームに入室することができる。
ユーザは、自己が参加可能なチャットルームをクライアント装置20側で一元的に管理することができる。
ユーザがチャットルームに入室してチャットを実行しているときには、そのチャットルームに対応したチャット画面130がモニタ装置10に表示される。また、チャット画面130には、そのチャットルームに関連付けられたチャット履歴情報のうち最新の情報を含む少なくとも一部の情報と、ルーム属性情報のうち少なくともルーム名を含む一部の情報とが表示される。従って、チャットシステムSYSのユーザは、サーバ装置が全てのチャット履歴情報を記憶して一元的に管理し、各クライアント装置がサーバ装置からチャット履歴情報の提供を受けて表示する場合と同様の感覚でチャットを行うことができる。
チャット画面130は、ユーザからの指示に応じて表示状態と非表示状態とに切り替わり、チャット画面130が非表示状態で他の画面(例えばゲーム画面140)が表示されているときに、入室中のチャットルームに対する他のクライアント装置1の入室や退室が行われた場合や、他のクライアント装置1からのチャットデータが送信された場合等には、それらを報知するチャット情報報知画面141が他の画面(ゲーム画面140)上に重ねて表示される。従って、ゲームなどの他の処理を実行しならが、他のユーザとのチャットを容易に行うことができる。
なお、上記実施形態では、マッチングサーバ3に存在しないチャットルームに対してクライアント装置1が入室を要求した場合、マッチングサーバ3は、クライアント装置1からチャットルームの開設要求を受けること開始条件としてチャットルームを開設するが、マッチングサーバ3に存在しないとの判定を開始条件としてチャットルームを開設してもよい。
上述の各実施の形態の説明は本発明の一例である。このため、本発明は上述の各実施の形態に限定されることはなく、本発明に係る技術的思想を逸脱しない範囲であれば、上述の実施の形態以外であっても種々の変更が可能であることは勿論である。