-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathowt_signalingchannel.cpp
More file actions
72 lines (64 loc) · 2.8 KB
/
owt_signalingchannel.cpp
File metadata and controls
72 lines (64 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <algorithm>
#include <iostream>
#include "owt_signalingchannel.h"
OwtSignalingChannel::OwtSignalingChannel() : io_(new sio::client()) {}
void OwtSignalingChannel::AddObserver(P2PSignalingChannelObserver& observer) {
observers_.push_back(&observer);
}
void OwtSignalingChannel::RemoveObserver(
P2PSignalingChannelObserver& observer) {
observers_.erase(remove(observers_.begin(), observers_.end(), &observer),
observers_.end());
}
void OwtSignalingChannel::Connect(
const std::string& host,
const std::string& token,
std::function<void(const std::string&)> on_success,
std::function<void(std::unique_ptr<Exception>)> on_failure) {
std::map<std::string, std::string> query;
query.insert(std::pair<std::string, std::string>("clientVersion", "4.2"));
query.insert(std::pair<std::string, std::string>("clientType", "cpp"));
query.insert(std::pair<std::string, std::string>(
"token", token)); // TODO: parse token to get actual token.
sio::socket::ptr socket = io_->socket();
std::string name = "owt-message";
socket->on(
name,
sio::socket::event_listener_aux(
[&](std::string const& name, sio::message::ptr const& data,
bool has_ack, sio::message::list& ack_resp) {
if (data->get_flag() == sio::message::flag_object) {
std::string msg = data->get_map()["data"]->get_string().data();
std::string from = data->get_map()["from"]->get_string().data();
uint32_t len = msg.length() + from.length();
if (len > MAX_MESSAGE_SIZE) {
printf("The received message size %u is too large.\n", len);
return;
}
for (auto it = observers_.begin(); it != observers_.end(); ++it) {
printf("from %s, received msg: %s\n", from.c_str(), msg.c_str());
(*it)->OnSignalingMessage(msg, from);
};
}
}));
io_->connect(host, query);
}
void OwtSignalingChannel::Disconnect(
std::function<void()> on_success,
std::function<void(std::unique_ptr<Exception>)> on_failure) {}
void OwtSignalingChannel::SendMessage(
const std::string& message,
const std::string& target_id,
std::function<void()> on_success,
std::function<void(std::unique_ptr<Exception>)> on_failure) {
printf("message: %s\n", message.c_str());
sio::message::ptr jsonObject = sio::object_message::create();
jsonObject->get_map()["to"] = sio::string_message::create(target_id);
jsonObject->get_map()["data"] = sio::string_message::create(message);
io_->socket()->emit("owt-message", jsonObject,
[=](const sio::message::list& msg) {
if (on_success) {
on_success();
}
});
}