Overview
- CommonAPI 송수신을 위한 테스트 프로그램을 만들어 본다.
- 이전에 자동생성된 코드를 사용하여 통신이 가능하도록 간단하게 구현해보자.
Client
송신프로그램
TestMessageClient.cpp
#include <iostream>
#include <string>
#include <unistd.h>
#include <CommonAPI-3.2/CommonAPI/CommonAPI.hpp>
#include <v1/commonapi/TestMessageProxy.hpp>
using namespace v1_0::commonapi;
int main()
{
// fidl 및 fdepl 파일 작성한 내용을 참고해서 NAME을 설정해야 함
const ::std::string CONST_DOMAIN_NAME = "local";
const ::std::string CONST_INSTANCE_NAME = "commonapi.TestMessage";
std::shared_ptr<CommonAPI::Runtime> runtime = CommonAPI::Runtime::get();
std::shared_ptr<TestMessageProxy<>> myProxy = runtime->buildProxy<TestMessageProxy>(CONST_DOMAIN_NAME, CONST_INSTANCE_NAME, "client");
std::cout << "proxy created" << std::endl;
while (true)
{
std::cout << "Checking proxy availability..." << std::endl;
// client가 service와 연결 되었는지 확인
if (myProxy->isAvailable())
{
std::cout << "Proxy is available now." << std::endl;
// fidl에서 sendMessage 메소드에 in 하게 되는 struct
TestMessage::Message msg;
msg.setShortMsg(1);
msg.setIntMsg(2);
msg.setLongMsg(3);
msg.setStrMsg("Hello, CommonAPI!");
// sendMessage 호출시 callStatus와 success를 받기 위한 변수
CommonAPI::CallStatus callStatus;
bool success;
// sendMessage 메소드 호출
myProxy->sendMessage(msg, callStatus, success);
// 결과 출력
if (callStatus == CommonAPI::CallStatus::SUCCESS && success)
{
std::cout << "Message sent successfully!" << std::endl;
}
else
{
std::cout << "Failed to send message. CallStatus: " << static_cast<int>(callStatus) << std::endl;
}
sleep(1);
}
else
{
std::cout << "Waiting for proxy to become available..." << std::endl;
sleep(1);
}
}
return 0;
}
Service
수신프로그램
TestMessageService.cpp
#include <iostream>
#include <thread>
#include <unistd.h>
#include <CommonAPI-3.2/CommonAPI/CommonAPI.hpp>
#include "TestMessageStubImpl.hpp"
int main()
{
// fidl 및 fdepl 파일 작성한 내용을 참고해서 NAME을 설정해야 함함
const ::std::string CONST_DOMAIN_NAME = "local";
const ::std::string CONST_INSTANCE_NAME = "commonapi.TestMessage";
std::shared_ptr<CommonAPI::Runtime> runtime = CommonAPI::Runtime::get();
std::shared_ptr<TestMessageStubImpl> myStub = std::make_shared<TestMessageStubImpl>();
// service를 등록하기 위해서 runtime에 stub을 등록
runtime->registerService<TestMessageStubImpl>(CONST_DOMAIN_NAME, CONST_INSTANCE_NAME, myStub);
std::cout << "Service registered" << std::endl;
while (true)
{
std::cout << "Waiting for messages..." << std::endl;
sleep(1);
}
return 0;
}
TestMessageStubImpl.hpp
#ifndef TEST_MESSAGE_STUB_IMPL_H_
#define TEST_MESSAGE_STUB_IMPL_H_
#include <CommonAPI-3.2/CommonAPI/CommonAPI.hpp>
#include <v1/commonapi/TestMessageStubDefault.hpp>
class TestMessageStubImpl : public v1_0::commonapi::TestMessageStubDefault
{
public:
TestMessageStubImpl() = default;
virtual ~TestMessageStubImpl() = default;
// 자동생성된 코드의 sendMessage 메소드를 오버라이드
virtual void sendMessage(const std::shared_ptr<CommonAPI::ClientId> _client, const v1_0::commonapi::TestMessage::Message _msg, sendMessageReply_t _reply) override;
};
#endif // TEST_MESSAGE_STUB_IMPL_H_
TestMessageStubImpl.cpp
#include "TestMessageStubImpl.hpp"
void TestMessageStubImpl::sendMessage(const std::shared_ptr<CommonAPI::ClientId> _client, const v1_0::commonapi::TestMessage::Message _msg, sendMessageReply_t _reply)
{
std::cout << "Received Message:" << std::endl;
std::cout << "Short Message: " << _msg.getShortMsg() << std::endl;
std::cout << "Integer Message: " << _msg.getIntMsg() << std::endl;
std::cout << "Long Message: " << _msg.getLongMsg() << std::endl;
std::cout << "String Message: " << _msg.getStrMsg() << std::endl;
// Reply with success
_reply(true);
}
빌드

CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(TestMessageProject)
find_package(CommonAPI REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++0x")
include_directories(
src-gen
${VSOMEIP_INCLUDE_DIRS}
/usr/local/include/CommonAPI-3.2/
)
add_executable(TestMessageClient
src/TestMessageClient.cpp
src-gen/v1/commonapi/TestMessageSomeIPProxy.cpp
src-gen/v1/commonapi/TestMessageSomeIPDeployment.cpp
)
target_link_libraries(TestMessageClient CommonAPI CommonAPI-SomeIP)
# -----------------------------------------------------------------------------
add_executable(TestMessageService
src/TestMessageService.cpp
src/TestMessageStubImpl.cpp
src-gen/v1/commonapi/TestMessageSomeIPStubAdapter.cpp
src-gen/v1/commonapi/TestMessageSomeIPDeployment.cpp
)
target_link_libraries(TestMessageService CommonAPI CommonAPI-SomeIP)
build 수행
mkdir build
cd build
cmake ..
make

실행

'Network' 카테고리의 다른 글
| Netfilter (7) | 2025.07.16 |
|---|---|
| VLAN (Virtual LAN) (0) | 2025.06.09 |
| CommonAPI(3) - commonapi generator (0) | 2025.05.27 |
| CommonAPI(2) - fidl / fdepl (0) | 2025.05.27 |
| CommonAPI(1) - 준비 (0) | 2025.05.27 |