이전 버전(1.33.4)의 문서를 보고 있습니다. 이 버전은 계속 지원됩니다.
최신 버전 정보는 1.33.5에서 확인하세요.
최신 버전 정보는 1.33.5에서 확인하세요.
TOnDisconnectedCB
이 콜백 함수로 로봇 컨트롤러와의 연결이 외부 원인이나 사용자 조작으로 종료되었는지 확인합니다.
콜백 함수 규칙을 참고하세요.
정의 위치: DRFLEx.h
// typedef 정의(DRFL.h)
typedef void (*TOnDisconnectedCB)();
// 등록 API(내부 + 래퍼)
DRFL_API void _set_on_disconnected(LPROBOTCONTROL pCtrl, TOnDisconnectedCB pCallbackFunc);
void set_on_disconnected(TOnDisconnectedCB pCallbackFunc)
{
_set_on_disconnected(_rbtCtrl, pCallbackFunc);
};
매개변수
없음
반환값
없음
예제
#include "DRFLEx.h"
#include <atomic>
#include <chrono>
#include <iostream>
#include <thread>
using namespace DRAFramework;
using namespace std;
CDRFLEx drfl;
atomic<bool> g_bDisconnected(false);
// 로봇 컨트롤러와의 연결이 끊기면 호출되는 콜백 함수
void OnDisconnectedCB()
{
// 이벤트만 기록하고, 재연결은 main()에서 처리
g_bDisconnected = true;
}
void OnMonitoringStateCB(const ROBOT_STATE eState)
{
cout << "[STATE] " << (int)eState << endl;
}
void RegisterCallbacks()
{
drfl.set_on_monitoring_state(OnMonitoringStateCB);
}
int main()
{
// 로봇 컨트롤러에 연결
if (!drfl.open_connection("192.168.137.100")) {
cout << "Failed to connect to controller." << endl;
return -1;
}
// 연결 해제 콜백 함수 등록. 연결이 끊긴 뒤에도 등록 상태가 유지됩니다
drfl.set_on_disconnected(OnDisconnectedCB);
RegisterCallbacks();
drfl.setup_monitoring_version(1);
// 연결 해제에 대비해 프로그램 실행 유지
while (true)
{
if (g_bDisconnected.exchange(false)) {
cout << "[DISCONNECT] Lost connection with the robot controller." << endl;
if (drfl.open_connection("192.168.137.100")) {
cout << "[RECONNECT] Connection re-established successfully." << endl;
// 다른 콜백 함수는 등록이 해제되었으므로 다시 등록합니다
RegisterCallbacks();
drfl.setup_monitoring_version(1);
}
else {
cout << "[ERROR] Failed to reconnect. Check network or controller power." << endl;
g_bDisconnected = true; // 다음 반복에서 재시도
}
}
this_thread::sleep_for(chrono::seconds(1));
}
drfl.close_connection();
return 0;
}
참고
이 콜백은 네트워크 세션이나 컨트롤러 연결이 종료되면 호출됩니다.
이 콜백으로 이벤트를 기록하거나, 사용자에게 알리거나, 애플리케이션에 재연결을 알릴 수 있습니다.
open_connection은 예제처럼 콜백 밖에서 호출하세요.연결이 종료되면(
close_connection, 연결 끊김, 이미 연결된 객체에서open_connection호출)set_on_*함수로 등록한 콜백의 등록이 모두 해제됩니다. 단,set_on_disconnected,set_on_monitoring_ctrl_io_ex(기본값인 DRCF_VERSION 3일 때),set_on_rt_monitoring_data,set_on_rt_log_alarm으로 등록한 콜백은 등록이 유지됩니다.open_connection이 성공할 때마다 나머지 콜백을 다시 등록하고setup_monitoring_version을 다시 호출하세요. 이미 연결된 객체에서open_connection을 호출하면 기존 연결을 먼저 닫고 “Already connected : <ip>”를 출력합니다.컨트롤러에서 약 2초 동안 데이터를 받지 못하면 연결이 종료되고 연결 해제 콜백이 호출됩니다. open_connection을 참고하세요.
연결이 종료된 뒤에는
open_connection만 호출하세요.