sgcWebSockets 2022.6 sürümünden itibaren kütüphaneye yeni bir bileşen dahil edildi: RFC8445'i uygulayan ICE istemcisi. ICE, WebRTC üzerinde kullanılan protokollerden biridir (zaten desteklenen STUN, TURN, WebSockets... ile birlikte). Interactive Connectivity Establishment (ICE), iki bilgisayarın eşler arası (peer-to-peer) ağda mümkün olduğunca doğrudan birbirleriyle konuşmasının yollarını bulmak için bilgisayar ağlarında kullanılan bir tekniktir. Bu en yaygın olarak Voice over Internet Protocol (VoIP), eşler arası iletişim, video ve anlık mesajlaşma gibi etkileşimli medya için kullanılır. Bu tür uygulamalarda, merkezi bir sunucu aracılığıyla iletişim kurmak yavaş ve pahalı olurdu, ancak İnternet üzerindeki istemci uygulamaları arasında doğrudan iletişim, ağ adresi çeviricileri (NAT'lar), güvenlik duvarları ve diğer ağ engelleri nedeniyle çok zordur.
Aday Toplama
ICE adayları toplamaya başlar; genellikle yerel IP Adreslerini, STUN protokolünü kullanarak yansıtıcı (reflexive) adresi ve TURN protokolünü kullanarak aktarılan (relayed) adresi elde eder.
Toplamayı başlatmak için GatherCandidates metodunu çağırın; bu, önce yerel IP adreslerini elde eden, ardından yansıtıcı IP Adresini elde etmek için STUN sunucusuna bağlanan ve son olarak aktarılan IP Adresini elde etmek için TURN sunucusuna bağlanan bir dahili zamanlayıcı başlatır.
Yeni bir aday her elde edildiğinde, OnICECandidate olayı asenkron olarak çağrılır; adayları toplarken herhangi bir hata olursa, OnICECandidateError olayı tetiklenir.
oICE := TsgcICEClient.Create(nil);
oTURN := TsgcTURNClient.Create(nil);
oTURN.Host := 'www.esegece.com';
oTURN.Port := 3478;
oTURN.TURNOptions.Authentication.Credentials := stauLongTermCredential;
oTURN.TURNOptions.Authentication.Username := 'sgc';
oTURN.TURNOptions.Authentication.Password := 'secret';
oICE.GatherCandidates();
procedure OnICECandidate(Sender: TObject; const aCandidate: TsgcICE_Candidate);
begin
DoLog('[#Candidate] ' + aCandidate.AsString);
end;
Adayları Eşleştirme
Adaylar (yerel ve uzak) elde edildikten ve SDP açıklamaları ayarlandıktan sonra, ICE arayan istemcisi, veri alışverişi yapabilenleri bulmak için tüm aday çiftlerini işlemeye başlayabilir. Bu işlemi başlatmak için ProcessCandidates metodunu çağırın.
ProcessCandidates metodu, bir STUN bağlama paketi göndererek tüm aday çiftlerini değerlendirir; STUN bağlama paketi diğer eşten bir yanıt olarak alınırsa, bu 2 eş arasında bağlantının mümkün olduğu anlamına gelir; böylece çift aday gösterilir.
Eşleştirme başarılı olduğunda, OnICECandidatePairNominated olayı asenkron olarak tetiklenir. Eşleştirmede bir hata olursa veya zaman aşımından sonra bağlanamazsa, OnICECandidatePairFailed olayı tetiklenir.
