Skip to content

WebSocket API

POS 플러그인에서 실시간 양방향 통신을 위한 WebSocket 인터페이스를 제공합니다. 실시간 데이터 동기화나 이벤트 수신이 필요한 경우에 사용할 수 있습니다.

WebSocket 생성

WebSocket 연결을 생성합니다.

ts
const ws = await websocket.create(
    url: string,                    // WebSocket 서버 URL
    headers: Record<string, string>, // 연결 헤더 정보
    options?: {                      // 연결 옵션
        rejectUnauthorized?: boolean;  // SSL 인증서 검증 여부 (기본값: true)
        followRedirects?: boolean;     // 리다이렉트 허용 여부 (기본값: false)
        timeout?: number;              // 연결 타임아웃 시간 (밀리초)
    }
);

Methods

connect

WebSocket 연결을 시작합니다.

ts
/**
 * WebSocket 연결 시작
 * @throws 연결 실패 시 에러 발생
 */
await ws.connect();

disconnect

WebSocket 연결을 종료합니다.

ts
/**
 * WebSocket 연결 종료
 */
await ws.disconnect();

send

메시지를 WebSocket 서버로 전송합니다.

ts
/**
 * 메시지 전송
 * @param data 전송할 메시지
 * @param options 전송 옵션
 */
ws.send({
    data: string,                    // 전송할 메시지
    options?: {                      // 전송 옵션
        mask?: boolean;              // 메시지 마스킹 여부 (기본값: true)
    }
});

Event Handlers

onMessage

메시지 수신 시 호출되는 콜백을 설정합니다.

ts
/**
 * 메시지 수신 핸들러 설정
 * @param callback 메시지 수신 시 호출될 콜백 함수
 */
ws.onMessage((message: string) => {
    console.log('수신된 메시지:', message);
});

onError

에러 발생 시 호출되는 콜백을 설정합니다.

ts
/**
 * 에러 핸들러 설정
 * @param callback 에러 발생 시 호출될 콜백 함수
 */
ws.onError((errorName?: string, errorMessage?: string) => {
    console.error('WebSocket 에러:', errorName, errorMessage);
});

onClose

연결 종료 시 호출되는 콜백을 설정합니다.

ts
/**
 * 연결 종료 핸들러 설정
 * @param callback 연결 종료 시 호출될 콜백 함수
 */
ws.onClose((code: string) => {
    console.log('연결 종료 코드:', code);
});

onOpen

연결 성공 시 호출되는 콜백을 설정합니다.

ts
/**
 * 연결 성공 핸들러 설정
 * @param callback 연결 성공 시 호출될 콜백 함수
 */
ws.onOpen(() => {
    console.log('WebSocket 연결 성공');
});

사용 예시

실시간 주문 상태 모니터링

ts
import { websocket } from '@tossplace/pos-plugin-sdk';

class OrderMonitor {
    private ws: WebSocket;

    constructor(private url: string, private token: string) {}

    async connect() {
        // WebSocket 연결 생성
        this.ws = await websocket.create(this.url, {
            Authorization: `Bearer ${this.token}`,
        }, {
            timeout: 5000,
            rejectUnauthorized: true,
        });

        // 이벤트 핸들러 설정
        this.ws.onOpen(() => {
            console.log('주문 모니터링 시작');
        });

        this.ws.onMessage((message) => {
            const orderUpdate = JSON.parse(message);
            this.handleOrderUpdate(orderUpdate);
        });

        this.ws.onError((errorName, errorMessage) => {
            console.error('모니터링 에러:', errorName, errorMessage);
        });

        this.ws.onClose((code) => {
            console.log('모니터링 종료:', code);
        });

        // 연결 시작
        await this.ws.connect();
    }

    private handleOrderUpdate(update: any) {
        console.log('주문 상태 변경:', update);
        // 주문 상태 변경 처리 로직
    }

    async disconnect() {
        await this.ws.disconnect();
    }
}

// 사용 예시
async function monitorOrders() {
    const monitor = new OrderMonitor(
        'wss://api.example.com/orders',
        'your-auth-token'
    );

    try {
        await monitor.connect();
        // 모니터링 중...
    } catch (error) {
        console.error('모니터링 시작 실패:', error);
    } finally {
        await monitor.disconnect();
    }
}