Sisujuhataja
Sisend
Seirejuhtimine on esimene osa rühma tsate funktsioonidest. See klass haldab ühendusi kaaslastega ja pakub kasutajale multipleksitud soketeid seadmetele, mida nad tahavad ühendada. Näiteks, kui Alice tahab olla ühendatud ühe Bob’i seadmega, et üle kanda 2 faili, palub ta ConnectionManageril avada 2 kanalit (üks faili kohta) Bobile. See annab:
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
}
});
Selle taga ühendatakse ConnectionManager kõigepealt Bob’i seadmega DHT (ICE kaudu) ja seadib TLS-paketti.
DHT külg
See on sama kui call, vaata Exchange ICE kandidaatid, ICE läbirääkimised, Encrypt kontrollisõiduke kuid ainult TCP.
Kui üks pool saab uue ICE-nõue, siis aktiveeritakse siiski tagasivõtmine, mis on määratud null onICERequest(onICERequestCallback&&& cb);
.
Uue kanali läbirääkimised
Kanalit määratletakse id (uniik) ja uri (ei ole unikaalne).
Kui see on valmis, peab ConnectionManager kanali 0 olemasolu.
Kasutatud protokoll on üsna lihtne ja näeb välja nagu RTP protokoll:
16 bitit kasutatakse keha pikkuse säilitamiseks.
16 bitit kanali ID (suunas)
keha
Kõigil paketel on 32 bitise len header.
Uue kanali taotlemiseks saadab ConnectionManager kanali 0-sse ChannelRequest
objekti (msgpack kasutatakse struktu seriaaliseerimiseks) ning saadetakse uue kanali ID ja nimi (sõnad on: isAnswer = false
).
Kanali sulgemine
Kanali jaoks edastatakse EOF, kui sisu pikkus on 0.
Sisu struktuurManager
Isiklik omadus
JamiAkonto omandab ConnectionManager ja on juurdepääs ChannelSocket objektidele (shared_ptr omandiga MultiplexedSocket.
ConnectionManager omandab MultiplexedSockets ja ICE objekte
MultiplexedSockets omandab TLS transpordi ja ChannelSocket objektide
ChannelSocket omandab andmepufferid
Töökohti
ConnectionManagerit kasutatakse kaaslaste ühenduste haldamiseks.
MultiplexedSockets kasutatakse andmete saatmiseks TLSSocketis, sisenevate pakettide lugemiseks ja kanalite haldamiseks.
ChannelSocketsit kasutab klient teise kaaslasega suhtlemiseks.
Kasutamine
Scenarioid kirjeldatakse vastavates üksusteeskuses (test/unitTest/connectionManager/connectionManager.cpp
)