From 242c9b20f735f9ea433f95ba0f195243633e8828 Mon Sep 17 00:00:00 2001 From: saqut Date: Mon, 5 Jun 2023 21:17:11 +0300 Subject: [PATCH] =?UTF-8?q?'README.md'=20g=C3=BCncelle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 293 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 292 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 302642c..891dac2 100644 --- a/README.md +++ b/README.md @@ -10,4 +10,295 @@ Bağlantı TCP tabanlı yüksek hızlı WebSocket protokolüne dayanır ve sunuc ## Proje tarafından uygulanan load balance teknolojisi -![image](https://git.saqut.com/saqut/storage/raw/branch/master/Diagram1.png) \ No newline at end of file +![image](https://git.saqut.com/saqut/storage/raw/branch/master/Diagram1.png) + +# Geliştirici Dökümantasyonu + +## Kurulum + +### Proje ortamına kurulumu + +```html + +``` + +### Geliştirme ortamına kurulumu + +```javascript +const mwse = new MWSE({ + endpoint: "wss://ws.saqut.com/" // MSWS kurulu sunucu adresi +}); +mwse.scope(async () => { + // Bağlantı sağlandığında burası tetiklenir +}) +``` + +### Kendi bağlantı kimliğini öğrenme + +```javascript +mwse.scope(async () => { + let me = mwse.peer('me'); // Kendi bağlantınız üzerinde işlem yaparken `me` olarak bahsedersiniz + console.log(me.socketId); // Her eşin tekil bir socketIdsi vardır +}) +``` + + +### Sanal Adres ayırma / yeniden ayırma / kaldırma +```javascript +mwse.scope(async () => { + let me = mwse.peer('me'); + + /** + * Sanal adresler size veri gönderilmek istendiğinde veya etkileşime + * geçilmesi istendiğinde ona socketId gibi bir UUID yerine sizi temsil eden daha kısa + * ip adresi, sayı veya kısa bir kod ile aynı şeyleri yapmanıza olanak tanır. + * Aynı anda hem sanal ip adres, sayı ve kısa koduna sahip olabilirsiniz + * ancak aynı türden temsil koduna (mesela kısa koddan) birden fazla sahip olamazsınız + * Yeni bir bağlantı daha açmanız gerekir + **/ + + // Bağlantınıze özel sanal tekil ip adresi kaynağı ayırın + let ipadress = await me.virtualPressure.allocAPIPAddress(); + + // Bağlantınıze özel sanal tekil numara kaynağı ayırın + let numberaddress = await me.virtualPressure.allocAPNumber(); + + // Bağlantınıze özel sanal kod kaynağı ayırın + let shortcodeadress = await me.virtualPressure.allocAPShortCode(); + + // Bütün bu kaynakları yenileriyle değiştirmek için + // her birinin ayrı ayrı yeniden alma işlevleri vardır + // Bir adresi yenilediğinizde artık eski adres kullanılmaz olur + me.virtualPressure.reallocAPIPAddress(); + me.virtualPressure.reallocAPNumber(); + me.virtualPressure.reallocAPShortCode(); + + // Bütün bu kaynakları kaldırmak için her birinin ayrı ayrı + // bırakma işlevi vardır + // Bir adresi kullanmadığınızda artık bu adreslerden size + // ulaşılamaz olursunuz + await me.virtualPressure.releaseAPIPAddress(); + await me.virtualPressure.releaseAPNumber(); + await me.virtualPressure.releaseAPShortCode(); + + await me.virtualPressure.queryAPIPAddress(); + await me.virtualPressure.queryAPNumber(); + await me.virtualPressure.queryAPShortCode(); +}) +``` + +### Farklı bir eşe erişme + +```javascript +mwse.scope(async () => { + let peer = mwse.peer('325a8f7f-eaaf-4c21-855e-9e965c0d5ac9') // Diğer eşin socketId'sini belirtiyoruz + let me = mwse.peer('me'); + + // Eşin ulaşılabilir (online) olup olmadığını verir + let isOnline = await peer.isReachable(); + + if(isOnline) + { + // İleitşim kurmak için istek gönderiyoruz + await peer.requestPair(); + } + + // Bize gönderilecek olan istekleri dinliyoruz + me.on('request/pair', peer => { + // İstek gönderen kullanıcının bilgileri peer içinde bulunur + // iletişime devam etmek için isteği kabul ediyoruz + peer.acceptPair(); + // veya istemiyorsak reddediyoruz + peer.rejectPair(); + }) + + // Karşımızdaki kullanıcının ne cevap verdiğini + // anlamak için sistem ayrı ayrı cevaplar üretir + + // Kabul ettiyse accept eventini tetikler + me.on('accepted/pair', peer => { + // İstek gönderen kullanıcının bilgileri peer içinde bulunur + }) + + // Reddettiyse veya iletişimi sonlandırmışsa + // end eventi tetiklenir + me.on('end/pair', peer => { + // Kullanıcının bilgileri peer içinde bulunur + }) +}) +``` + +Eğer uygulamanızda bu şekilde bir erişim metodolojisi kullanmak istemiyorsanız +pair sistemini elle kapatabilirsiniz + +```javascript +mwse.scope(async () => { + let me = mwse.peer('me'); + + // Tüm kullanıcılar size mesaj iletebilir + await peer.disablePairAuth(); + + // Sadece eşleşmiş kullanıcılar size mesaj iletebilir + await peer.enablePairAuth(); +}) +``` +## Tünelleme ile mesajlaşma + +MWSE üzerinde karşılıklı mesajlaşma için 2 + metodoloji bulunur bunlardan birisi serbest mesajlaşmadır ve + bu şekilde çalışır +```javascript +mwse.scope(async () => { + let me = mwse.peer('325a8f7f-eaaf-4c21-855e-9e965c0d5ac9'); + + // Tüm kullanıcılar size mesaj iletebilir + await peer.disablePairAuth(); + + // Bu şekilde serbest bir şekilde herhangi bir zamanda karşılıksız mesaj iletebilirsiniz + peer.send({ + text: "Good morning" + }) + + // Kullanıcı her hangi bir mesaj gönderdiğinde burası tetiklenir + peer.on('message', message => { + if(text.message == "Good morning") + { + // Eğer mesaj için bir cevap bekliyorsa cevap veriyoruz + peer.send("You are welcome"); + }else{ + // Ancak mesaj önceden gönderdiğimiz isteğin cevabıysa görüntülüyoruz + console.log("Reply is :", message) // --> You are welcome + } + }) +}) +``` +2. yöntem ise el sıkışmalı mesajlaşmadır ve gönderdiğiniz bir mesaja verilen karşılık olarak +sistem, gelen mesajın gönderdiğiniz hangi mesaja karşılık olarak gönderildiğini tuttuğu için +request/response şeklinde ilerleyebilir + +```javascript +mwse.scope(async () => { + let peer = mwse.peer('325a8f7f-eaaf-4c21-855e-9e965c0d5ac9'); + let me = mwse.peer('me'); + + // Tüm kullanıcılar size mesaj iletebilir + await me.disablePairAuth(); + + // Bizden istenecek veriler için önceden cevapları hazırlıyoruz + me.on('request', ({body, response}) => { + switch(body.message) + { + case "Good morning":{ + // do anything... + response("You are welcome") + break; + } + } + }) + + + // Bu şekilde serbest bir şekilde herhangi bir zamanda karşılıksız mesaj iletebilirsiniz + let response = await peer.request({ + message: "Good morning" + }); + + console.log(response) // response ---> You are welcome +}) +``` + +Bu şekilde hem okunabilirlik artar hemde mesajlar karşılıklı olarak etki-tepki şeklinde ilerler + +---- + + +### Oda kurma ve kapatma + +Oda sistemi kullanıcıların bir araya gelerek, tek seferde bir grubun +toplu olarak birbirleriyle mesajlaşabileceği bir yapıdır. +Kişiler birbirlerini bulabilir, toplu mesajlar iletebilirler, odaya +katılabilir veya ayrılabilirler + + +Odanın ayarlarını, odayı ilk oluşturan kişi belirler ve oda bir kez oluşturulduğunda yeniden aynı isimle oda açılamaz +Oda türü (joinType) herkese açık `free`, davet ile `invite`, şifreli `password` veya herkese kapalı `lock` olabilir. + +```javascript + +mwse.scope(async () => { + + let room = mwse.room({ + name: "Oda ismi", // odanın görünür ismi + description: "Oda açıklaması", // odanın görünecek ismi + joinType: "free", // herkese açık oda + credential: "****", // varsa şifre + notifyActionInvite: false, // yeni biri katılmak istediğinde tüm peerlere haber iletme özelliği + notifyActionJoined: true, // yeni biri katıldığında tüm peerlere haber iletir + notifyActionEjected: true, // Biri odadan ayrıldığında tüm peerlere haber iletir + ifexistsJoin: false // true ayarlanırsa, oluşturma aşamasında oda zaten var yanıtı alırsa hata vermek yerine odaya katılır + }); + + // Verilen isime ait odaya katılmak için bu komut yeterlidir + await room.join(); // --> odaya katılırken sorun oluşursa hata fırlatır + + // Verilen ayarlara sahip odayı oluşturmak için aşağıdaki komut yeterlidir + await room.createRoom(); // -> oda oluştururken sorun oluşursa hata fırlatır + + // Var olan bir odadan ayrılmak için bu komut kullanılabilir + await room.eject(); + + // İçinde bulunduğu odanın tüm eşlerinin idsini verir + let peers = await room.fetchPeers(); +}); +``` + +### Oda içerisinde iletişim + +Odaya katıldıktan sonra katılan kişiler `room` üzerinden mesaj iletebilirsiniz, verilen her mesajı sistem istisnasız tüm oda katılımcılarına iletmekten sorumludur +Oda içerisindeki kişiler ile oda içindeki kişilerin listesini alarak özel iletişimede geçebilirsiniz ancak aynı odadaki kişiler sistem tarafında yinede güvenilir kabul edilmez +Sistem pairAuth güvenliği kapalı olan kişilere mesajlar iletir ancak açık olan kullanıcıların her biri için ayrı ayrı eşleşme isteği göndermelisiniz + +```javascript + +mwse.scope(async () => { + + let room = mwse.room({ + name: "Oda ismi", // odanın görünür ismi + description: "Oda açıklaması", // odanın görünecek ismi + joinType: "free", // herkese açık oda + notifyActionJoined: true, // yeni biri katıldığında tüm peerlere haber iletir + ifexistsJoin: false // true ayarlanırsa, oluşturma aşamasında oda zaten var yanıtı alırsa hata vermek yerine odaya katılır + }); + + // Verilen ayarlara sahip odayı oluşturmak için aşağıdaki komut yeterlidir + await room.createRoom(); // -> oda oluştururken sorun oluşursa hata fırlatır + + // Oda içerisinde mesaj gönderildiğinde gönderilen paketi dinlemek için aşağıdaki komut kullanılabilir + room.on('message', message => { + // Odaya `message` paketi iletildi + }) + + // Odaya yeni birisi katıldığında haber almak için aşağıdaki komut kullanılabilir + room.on('join', peer => { + // Odaya katılan kişinin bilgisi peerde tutulur + // Odaya katılan kişiyle bağlantı kurup, oda dışında kendisiyle iletişimede geçebilirsiniz + peer.requestPair(); + }) + + // Odaya birisi ayrıldığında haber almak için aşağıdaki komut kullanılabilir + room.on('eject', peer => { + // Odadan ayrılan kişinin bilgisi peerde tutulur + }) + + // Odadaki herkese mesaj iletmek için room içerisindeki send komutu kullanılabilir + room.send({ + message: "Good year !" + }); + + // Oda kapatıldığında close tetiklenir + room.on('close', () => { }) +}); +``` + +### Odayı kapatma + +Odalar odaya ait olan bağlantılar üzerine kurulur, tüm bağlantılar odadan çıktığında oda otomatik olarak kapatılır \ No newline at end of file