ft_irc 1.0
読み取り中…
検索中…
一致する文字列を見つけられません
API リファレンス

はじめに

このドキュメントは、IRCサーバの内部実装を理解し、開発やデバッグを行うことを目的としています。 主に、ircserv のサーバ開発者およびコードレビュー担当者を読者として想定しています。

ビルド方法: プロジェクトのビルド方法については、ft_irc Documentationのセットアップとビルド を参照してください。

Doxygenドキュメントの生成方法: Doxygenドキュメントはft_ircプロジェクトのルートでmake doxygen を実行することで生成されます。

設計思想とアーキテクチャ概要

ircserv は、C++98標準に準拠したマルチクライアント対応IRCサーバです。 主な設計思想として、モジュール性を高め、各コンポーネントが明確な責任を持つように設計されています。

主要なコンポーネントとそれらの関係性:

  • Server クラス:
    • 役割: サーバのメインロジックとソケット管理を担当します。新しいクライアント接続の受け入れ、I/Oイベントの監視、クライアント切断の処理を行います。
    • 主要データ: 稼働中のソケット情報、クライアントリスト、チャネルリスト。
    • 主要メソッド: run(), acceptNewClient(), handleClientData(), sendResponse(), closeClientConnection()
    • 関連: Client クラスのインスタンスを管理し、CommandManager を利用してコマンドを処理します。
  • Client クラス:
    • 役割: 各クライアントのセッション管理、認証状態、ニックネーム、ユーザー名、リアルネーム、バッファリングされたメッセージなどを管理します。
    • 主要データ: ソケットディスクリプタ、ニックネーム、ユーザー名、パスワード状態、バッファ。
    • 主要メソッド: getFd(), isAuthenticated(), setNickname(), setUsername(), enqueueMessage()
    • 関連: Server クラスによって生成・管理され、Channel や他の Client とのインタラクションのために利用されます。
  • Channel クラス:
    • 役割: IRCチャネルの管理、メンバーリスト、トピック、モード、メッセージブロードキャストなどを担当します。
    • 主要データ: チャネル名、トピック、モード、メンバーリスト (オペレータ、通常メンバー)。
    • 主要メソッド: addClient(), removeClient(), broadcastMessage(), setTopic(), setMode()
    • 関連: Server クラスによって管理され、クライアントからのチャネル関連コマンドによって操作されます。
  • CommandManager クラス:
    • 役割: クライアントからのコマンド文字列をパースし、対応する ICommand インターフェースを実装した具体的なコマンドクラスのインスタンスを呼び出します。コマンドの登録と実行を管理します。
    • 主要データ: コマンド名と ICommand ポインタのマッピング。
    • 主要メソッド: executeCommand()
    • 関連: Server クラスから呼び出され、コマンドに応じた処理を委譲します。
  • ICommand インターフェースと各コマンドクラス:
    • 役割: すべてのコマンドが実装すべきインターフェースを定義します (execute() メソッドなど)。各コマンドクラス (例: PASS, NICK, JOIN) はこのインターフェースを実装し、それぞれのコマンド固有のロジックを提供します。
    • 関連: CommandManager によって実行されます。

全体的なデータフローの概要:

  1. Server がクライアント接続を受け入れ、Client オブジェクトを作成します。
  2. Server はクライアントソケットからのデータ読み込みイベントを監視し、データを受信すると Client オブジェクトに紐付けます。
  3. 受信したデータは CommandManager に渡され、コマンドとしてパースされます。
  4. CommandManager は適切なコマンドクラスの execute() メソッドを呼び出し、コマンドが実行されます。
  5. コマンドの実行結果 (レスポンスメッセージ) は Server を通じて該当するクライアントまたはチャネルに送信されます。

実装機能

本サーバは、以下のRFC1459コマンドをサポートします。

  • 接続: PASS, NICK, USER, QUIT
  • メッセージ: PRIVMSG, NOTICE
  • チャネル: JOIN, PART, TOPIC, KICK, INVITE, LIST
  • ユーザー: WHO, WHOIS
  • モード: MODE i, t, k, o, l

これらのコマンドは CommandManager を通じてパースされ、対応するコマンドクラス (PassCommand, NickCommand など) の execute メソッドによって処理されます。 各コマンドの詳細は、それぞれのコマンドクラスのドキュメントを参照してください。 現在、RFC1459以外の独自拡張コマンドや特定の注意点はありません。

コーディング規約 / Doxygen記述規約

本プロジェクトでは、以下の規約を遵守してください。

  • C++98準拠: すべてのコードはC++98標準に準拠している必要があります。
  • Doxygenコメント: クラス、構造体、関数、データメンバーなど、すべてのAPI要素にはDoxygenコメントを記述してください。
    • @brief: 簡潔な説明 (1行)
    • @details: 詳細な説明
    • @param: 引数の説明
    • @return: 戻り値の説明
    • その他のタグ (@see, @note, @attention) も適宜使用してください。
    • 例:
      /**
      * @brief クライアントにメッセージを送信します。
      * @param client_fd 送信するクライアントのファイルディスクリプタ。
      * @param message 送信するメッセージ文字列。
      * @return 送信が成功した場合はtrue、失敗した場合はfalse。
      *\/
      bool sendMessage(int client_fd, const std::string& message);

貢献ガイドライン

Doxygenドキュメントの更新やコードへの貢献については、以下の点を考慮してください。

  • 新しい機能やクラスを追加する場合は、必ずDoxygenコメントを追加・更新してください。
  • 既存のコードを変更する場合、関連するDoxygenコメントも最新の状態に保ってください。