2.4 Extension 타입
헤더 파일:
include/extension_types.h
개요
ExtensionClient 모듈은 플러그인 데이터를 기본 정보, 실행 상태, 전체 상세 정보의 3계층 구조로 표현합니다.
GetList() 는 std::vector<ExtensionInfo> 를 반환하고, Get(const std::string& name) 은 단일 ExtensionInfo 를 반환하며, C99 Arm_Extension_GetList / Arm_Extension_Get 는 같은 구조를 compact JSON 텍스트로 직렬화합니다.
2.4.1 JSON 형태
단일 플러그인 상세 정보:
{
"extension": {
"name": "demo",
"author": "agilebot",
"type": "easyservice",
"scriptLang": "python",
"description": "demo extension",
"version": "1.0.0",
"contact": "",
"copyright": "",
"license": "",
"entry": "main.py",
"url": "http://127.0.0.1:9000"
},
"state": {
"enabled": true,
"isRunning": true,
"port": 9000
}
}플러그인 목록:
[
{
"extension": {},
"state": {}
}
]2.4.2 ExtensionBaseInfo
ExtensionBaseInfo 는 플러그인의 기본 메타데이터를 나타내며, 반환 JSON의 extensionClient 노드에서 옵니다. 주로 플러그인 식별 정보를 표시하고, 플러그인 타입을 판단하며, 후속 조회, 시작/중지, 서비스 호출 시 플러그인 식별자 소스로 사용됩니다.
모든 필드는 문자열입니다. 서버에서 필드가 누락되었거나 필드 타입이 맞지 않으면 SDK가 빈 문자열로 채웁니다.
| 필드 | 타입 | 설명 | 일반적인 용도 |
|---|---|---|---|
name | std::string | 플러그인 이름이며 플러그인의 주요 식별자 | ExtensionClient::Get() , Toggle() , CallService() 에 전달 |
author | std::string | 플러그인 작성자 | 플러그인 출처 표시 |
type | std::string | 플러그인 타입. 예: EasyService 계열 플러그인 | 플러그인 기능 판단 또는 UI 분류 |
scriptLang | std::string | 스크립트 언어. 필드명은 서버 측 camelCase 유지 | Python 같은 실행 언어 표시 |
description | std::string | 플러그인 설명 | 플러그인 용도 표시 |
version | std::string | 플러그인 버전 | 버전 확인 및 버전 번호 표시 |
contact | std::string | 연락처 | 유지보수자 연락처 표시 |
copyright | std::string | 저작권 정보 | 저작권 고지 표시 |
license | std::string | 라이선스 | 사용 허가 정보 표시 |
entry | std::string | 플러그인 진입 파일 | 플러그인 시작 진입점 확인 |
url | std::string | Web 플러그인 접근 주소 | Web 페이지 열기 또는 서비스 진입점 위치 확인 |
2.4.3 ExtensionState
ExtensionState 는 플러그인의 실행 상태를 나타내며, 반환 JSON의 state 노드에서 옵니다.
| 필드 | 타입 | 설명 | 업무 측 일반적인 용도 |
|---|---|---|---|
enabled | bool | 플러그인 활성화 여부 | 사용자가 시작/중지 또는 호출을 시작할 수 있는지 결정 |
isRunning | bool | 플러그인 프로세스 실행 여부. 필드명은 서버 측 camelCase 유지 | 플러그인 서비스를 호출할 수 있는지 판단 |
port | int32_t | 플러그인 서비스 포트. 누락 시 기본값 0 | 플러그인 서비스 포트 위치 확인. 0 은 유효한 포트가 제공되지 않았음을 의미 |
2.4.4 ExtensionInfo
ExtensionInfo 는 ExtensionClient 모듈의 통합 반환 구조입니다.
GetList()는std::vector<ExtensionInfo>를 반환합니다.Get()은 단일ExtensionInfo를 반환합니다.- C99
Arm_Extension_GetList/Arm_Extension_Get는 같은 필드명의 JSON을 반환합니다.
| 필드 | 타입 | 설명 | 업무 측 일반적인 용도 |
|---|---|---|---|
extensionClient | ExtensionBaseInfo | 플러그인 기본 정보 | 플러그인 이름, 타입, 진입점, 버전 등 메타데이터 읽기 |
state | ExtensionState | 플러그인 실행 상태 | 플러그인 활성화 여부, 실행 여부, 서비스 포트 판단 |
플러그인 목록을 읽을 때 각 배열 요소는 ExtensionInfo 입니다. 단일 플러그인 상세 정보를 읽을 때도 같은 구조가 반환되며, 대상 플러그인만 포함합니다.
2.4.5 읽는 예
| 판단할 내용 | 읽을 필드 | 설명 |
|---|---|---|
| 이후 어떤 플러그인을 조작할지 | info.extension.name | 계속 Get() , Toggle() , CallService() 에 전달 가능 |
| 플러그인을 호출할 수 있는지 | info.state.enabled 및 info.state.isRunning | 보통 활성화되고 실행 중이어야 서비스 호출에 적합 |
| 플러그인 서비스가 어느 포트에 있는지 | info.state.port | 0 은 로봇 본체 측 서비스가 유효한 포트를 반환하지 않았음을 의미 |
| 플러그인 진입 스크립트 | info.extension.entry | 플러그인 시작 진입점 확인에 사용 |
| 플러그인 타입과 스크립트 언어 | info.extension.type 및 info.extension.scriptLang | 표시 및 분류에 사용 |
2.4.6 기본값 규칙
- 서버 응답에 필드가 누락되면 문자열 필드는 빈 문자열로 채웁니다.
enabled/isRunning이 누락되면false로 채웁니다.port가 누락되었거나 타입이 유효하지 않으면0으로 채웁니다.
최상위 extensionClient / state 노드가 누락되면 SDK는 빈 객체로 처리한 뒤 필드별로 기본값을 채웁니다.
2.4.7 C99 매핑 기준
| C99 인터페이스 | 출력 내용 |
|---|---|
Arm_Extension_GetList | ExtensionInfo[] 의 compact JSON 텍스트 |
Arm_Extension_Get | 단일 ExtensionInfo 의 compact JSON 텍스트 |
추가 규칙:
- C99 출력은 추가 들여쓰기 없는 UTF-8 compact JSON을 사용합니다.
Arm_Extension_CallService가 반환하는 것은 서비스 결과result의 JSON 텍스트이며,ExtensionInfo구조체 계열에 속하지 않습니다.