Управник веза
Увод
Menadžer veze je prvi deo funkcija grupnog ćaskanja. Ova klasa upravlja vezama sa kolegama i nudi korisnicima multipleksirane utičnice za uređaje koje žele da povežu. Na primer, ako Alisa želi da bude povezana sa jednim od Bobovih uređaja radi prenosa 2 fajla, ona će zatražiti od ConnectionManager-a da otvori 2 kanala (jedan po datoteci) Bobu. Ovo će dati:
aliceAccount->connectionManager().connectDevice(bobDeviceId, "file://file1",
[](std::shared_ptr<ChannelSocket> socket) {
if (socket) {
// transfer first file
}
});
aliceAccount->connectionManager().connectDevice(bobDeviceId, "file://file2",
[](std::shared_ptr<ChannelSocket> socket) {
if (socket) {
// transfer second file
}
});
Затим се ConnectionManager прво повезује са Бобovim уређајем преко DHT-а (преку ICE-а) и поставља TLS Socket. Онда ће тражити канал, а када је канал спреман, обавести Алису путем званог обављења.
ДХТ страна
То је исто као call, види Exchange ICE kandidati, ICE преговарање, Encrypt контролна затвара али само у TCP.
Међутим, када страна прими нову захтев за ИЦЕ, активира се повратна позива постављена са невадим onICERequest(onICERequestCallback&&& cb);
.
Pregovaranje o novom kanalu
Канал се дефинише ID (уникално) и uri (не јединствено).
Када је спреман, Управник веза сматра да канал 0 постоји. Овај канал се назива канал CONTROL и користи се за тражење нових канала.
Протокол који се користи је прилично једноставан и изгледа као RTP протокол:
16 битова се користи за чување дужине тела.
16 битова за идентификатор канала (дестинација)
тело
Дакле, сви пакети имају 32-битно леен наслово.
За захтев за нови канал, Управник веза ће послати ChannelRequest
објекат (msgpack се користи за сериализацију структура) у каналу 0 да би послао идентификатор и име новог канала врснику (с isAnswer = false
).
Затварање канала
ЕОФ се преноси за канал ако је дужина садржаја 0.
Структура повезивањаГраф
Собственост
Јамиакунт поседује ConnectionManager и имају приступ објектима ChannelSocket (shared_ptr поседује са MultiplexedSocket.
Коннекција менаџер поседује објекте MultiplexedSockets и ICE
MultiplexedSockets поседује TLS транспорт и ChannelSocket објекте
ChannelSocket поседује буфер податке
Улога
ConnectionManager се користи за управљање везама са вршњацима.
Мултиплексекс Сокети се користе за слање података преко ТЛССокета, читање долазних пакета и управљање каналима.
ChannelSockets се користи од стране клијента за интеракцију са другим вршњацима.
Употреба
Сценари су описани у одговарајућим јединицам тестирања (test/unitTest/connectionManager/connectionManager.cpp
)