Socket.IO API

Oasis는 Node.JS가 제공하는 Socket.IO 서버와 통신을 지원합니다. Socket.IO는 WebRTC 등에서 Signaling Server로 활용됩니다.

Oasis의 Socket.IO 클라이언트 API는 현재 Node.JS Socket.IO 버전 3을 지원합니다. Node.JS가 Socket.IO 버전 4 이상을 사용할 경우, 서버단에 아래와 같이 환경 설정이 필요합니다.

let socketIO = require('socket.io');

let io = socketIO(https_server, {
    allowEIO3: true,
});

헤더 파일

OasisNet.h

SocketIoEventDelegate 인터페이스

class SocketIoEventDelegate : public std::enable_shared_from_this<SocketIoEventDelegate>
{
public:
    SocketIoEventDelegate();
    virtual ~SocketIoEventDelegate();

    virtual void onConnected(const SocketIoClientRef &sio, const char *sid);
    virtual void onClosed(const SocketIoClientRef &sio, bool is_lost);
    virtual void onEvent(const SocketIoClientRef &sio, const std::string &event, const std::list<std::string> &values);
    virtual void onMessage(const SocketIoClientRef &sio, key_value_map_t &msg, const std::string &from_sid);
};
void onConnected ( const SocketIoClientRef & sio , const char * sid )
OasisNet.h
연결되었을 때 발생하는 이벤트 호출 콜백함수 입니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
sid  Socket.IO 서버로 부터 할당받은 SID 문자열입니다.
void onClosed ( const SocketIoClientRef & sio , bool is_lost )
OasisNet.h
연결이 닫히거나 서버로 부터 Close 패킷을 수신하였을 때 발생하는 이벤트 호출 콜백 함수입니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
is_lost  true이면 서버로 부터 일정 시간동안 응답이 없어 연결이 끊겼음을 의미합니다. false인 경우, 서버로부터 Close 패킷을 수신하였을 경우입니다.
void onEvent ( const SocketIoClientRef & sio , const std::string & event , const std::list<std::string> & values )
OasisNet.h
서버로 부터 이벤트를 수신하였을 때 발생하는 이벤트 호출 콜백 함수입니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
event  이벤트 이름입니다.
values  이벤트 값 목록입니다.
void onMessage ( const SocketIoClientRef & sio , key_value_map_t & msg , const std::string & from_sid )
OasisNet.h
메세지를 수신하였을 경우 발생하는 이벤트 호출 콜백 함수입니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
msg  key-value map 형태의 메세지입니다.
from_sid  메세지를 보낸 클라이언트의 SID 입니다.

함수

SocketIoClientRef sioConnect ( const char * url , int32_t timeout , const std::shared_ptr<SocketIoEventDelegate> & delegate , key_value_map_t & parameters )
OasisNet.h
Socket.IO 서버에 접속합니다.
매개변수
url  서버 URL입니다. 웹소켓 서버 주소와 같은 형식입니다.
timeout  연결할 때까지 기다리는 최대 대기 시간입니다. 밀리초 단위입니다.
delegate  Socket.IO 이벤트 처리를 위한 SocketIoEventDelegate로 부터 유도된 사용자 정의 객체입니다.
parameters  연결에 필요한 key-value map 입니다.
리턴값
성공하면 Socket.IO 클라이언트 연결 객체를 리턴합니다. 실패하면 nullptr을 리턴합니다.

sioConnect 필요한 key-value map은 아래와 같습니다.

기본값
필수
설명
tls-disable-certificate-validation
0
 
서버의 인증서를 검증하지 않습니다.
tls-use-sni
0
 
서버 연결시 서버의 FQDN을 Hello Handshake에 포함시킵니다.
int32_t sioReconnect ( SocketIoClientRef & sio )
OasisNet.h
Socket.IO 서버에 접속합니다. 네트워킹이 다시 이용 가능한 상태가 되었을 때 사용됩니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
리턴값
  • 0: 성공
  • -1: 실패
int32_t sioClose ( SocketIoClientRef & sio , int32_t timeout )
OasisNet.h
연결을 닫습니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
timeout  연결 닫기가 완료될 때까지 기다리는 최대 시간입니다. 밀리초 단위입니다.
리턴값
  • 0: 성공
  • -1: 실패
ssize_t sioEmit ( const SocketIoClientRef & sio , const char * event_name , const char * event_value )
OasisNet.h
한개의 값을 갖는 이벤트를 전송합니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
event_name  이벤트 이름입니다.
event_value  이벤트 값입니다. nullptr인 경우, 이벤트 이름만 전송합니다.
리턴값
성공할 경우 이벤트 메세지의 길이를 리턴합니다. 실패할 경우 -1을 리턴합니다.
ssize_t sioEmit2 ( const SocketIoClientRef & sio , const char * event_name , const char * event_value1 , const char * event_value2 )
OasisNet.h
두개의 값을 갖는 이벤트를 전송합니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
event_name  이벤트 이름입니다.
event_value1  첫번째 이벤트 값입니다.
event_value2  두번째 이벤트 값입니다.
리턴값
성공할 경우 이벤트 메세지의 길이를 리턴합니다. 실패할 경우 -1을 리턴합니다.
ssize_t sioSend ( const SocketIoClientRef & sio , key_value_map_t & msg )
OasisNet.h
메세지를 전송합니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
msg  메세지를 구성하는 key-value map입니다.
리턴값
성공할 경우 전송한 메세지 크기를 리턴합니다. 실패할 경우 -1을 리턴합니다.
ssize_t sioSend ( const SocketIoClientRef & sio , const char * room_id , key_value_map_t & msg )
OasisNet.h
room id를 포함한 메세지를 전송합니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
room_id  room id 문자열입니다.
msg  메세지를 구성하는 key-value map입니다.
리턴값
성공할 경우 전송한 메세지 크기를 리턴합니다. 실패할 경우 -1을 리턴합니다.
const char * sioSid ( const SocketIoClientRef & sio )
OasisNet.h
Socket.IO 클라이언트 연결 객체의 SID를 얻습니다.
매개변수
sio  Socket.IO 클라이언트 연결 객체입니다.
리턴값
성공할 경우, SID 문자열을 리턴합니다. 실패할 경우 nullptr을 리턴합니다.