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만 호출하세요.