本ドキュメントは、ICommServer
に含まれる API に関する仕様を説明します。ICommServer
はサーバ通信を実現するためのインターフェースであり、データの送受信を行うための通信オブジェクトを生成および管理します。
static std::unique_ptr<ICommServer> create(CommIoType type);
std::shared_ptr<ICommIO> server_open(ICommEndpointType *endpoint) = 0;
本 API を利用するには、以下のヘッダファイルをインクルードする必要があります。
#include "comm.hpp"
本 API の実装は、create()
メソッドで生成されるクラスインスタンスによって提供されます。
- 本 API を利用する前に、
comm_init()
関数を呼び出して通信モジュールを初期化してください。 create()
メソッドを使用してICommServer
オブジェクトを生成してください。server_open()
を使用して、通信に必要なオブジェクトを初期化してください。
static std::unique_ptr<ICommServer> create(CommIoType type);
指定された通信タイプに応じた ICommServer
オブジェクトを生成します。
パラメータ名 | 型 | 説明 |
---|---|---|
type |
CommIoType |
作成する通信サーバのタイプ。例: TCP , UDP |
型 | 説明 |
---|---|
std::unique_ptr<ICommServer> |
指定された通信タイプに基づいて生成された ICommServer オブジェクト。 |
nullptr |
生成に失敗した場合は nullptr を返します。 |
- 通信タイプが無効である場合、本関数は
nullptr
を返します。そのため、戻り値のチェックを必ず行ってください。
std::shared_ptr<ICommIO> server_open(ICommEndpointType *endpoint) = 0;
指定されたエンドポイントに基づいてサーバ通信オブジェクトを初期化します。
パラメータ名 | 型 | 説明 |
---|---|---|
endpoint |
ICommEndpointType* |
サーバ通信のエンドポイント情報を格納したオブジェクトのポインタ。 |
型 | 説明 |
---|---|
std::shared_ptr<ICommIO> |
指定されたエンドポイントに基づいて初期化された通信オブジェクト。 |
nullptr |
初期化に失敗した場合は nullptr を返します。 |
- エンドポイントが無効である場合、本関数は
nullptr
を返します。 - 戻り値が
nullptr
の場合は適切なエラーハンドリングを実装してください。
以下に ICommServer
の使用例を示します。
#include "comm.hpp"
#include <iostream>
int main() {
// 通信モジュールの初期化
comm_init();
// ICommServer オブジェクトの作成
auto server = ICommServer::create(CommIoType::TCP);
if (server == nullptr) {
std::cerr << "Failed to create ICommServer" << std::endl;
return -1;
}
// サーバ通信オブジェクトのオープン
ICommEndpointType endpoint;
endpoint.port = 8080;
auto comm_io = server->server_open(&endpoint);
if (comm_io == nullptr) {
std::cerr << "Failed to open server connection" << std::endl;
return -1;
}
// 通信オブジェクトの使用
char recv_data[1024];
int recv_bytes;
if (!comm_io->recv(recv_data, sizeof(recv_data), &recv_bytes)) {
std::cerr << "Failed to receive data" << std::endl;
} else {
std::cout << "Received: " << std::string(recv_data, recv_bytes) << std::endl;
}
// 通信の終了
if (!comm_io->close()) {
std::cerr << "Failed to close connection" << std::endl;
}
return 0;
}
- 本 API を利用する前に、
comm_init()
を必ず呼び出してください。 - TCP と UDP の通信仕様を理解した上で、本 API を適切に利用してください。
- 通信エラーが発生した場合は、リトライなどの適切なエラーハンドリングを実装してください。
- 詳細については、api_comm.md を参照してください。
- 本仕様書は api-template.md に基づいて作成されています。