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을 리턴합니다.