1 mwseroom
saqut edited this page 2025-12-07 03:09:27 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

MWSE Oda sistemi

Oda ayrıntıları

interface IRoomOptions {
    name: string;
    description?:string;
    joinType: "free"|"invite"|"password"|"lock";
    credential?: string;
    ifexistsJoin?: boolean;
    accessType?: "public"|"private";
    notifyActionInvite?: boolean;
    notifyActionJoined?: boolean;
    notifyActionEjected?: boolean;
    autoFetchInfo?:boolean
}

mwse.room(room : IRoomOptions);

Odayı oluşturan peerin yapacağı zorunlu ayarlar bunlardır

  • name Odanın ismidir ve tekildir
  • description Odanın açıklaması
  • joinType odaya katılma metodunu belirler
  • free odaya herkes anında katılabilir
  • invite bir peer odaya sadece başka bir peerin davet/kabul işlemiyle dahil edebilir
  • password bir şifreyi bilen herkes katılabilir
  • lock oda katılma durumlarına kapalı, kimse katılamaz
  • accessType odanın herkese açık olup olmadığı public herkese açık, private gizli oda

Odayı oluşturan veya katılmak isteyen peerin yapacağı ayarlar bunlardır

  • credential odanın şifresi
  • notifyActionInvite Davet bildirimlerin almak isteyip istemediğini belirtir
  • notifyActionJoined Odaya katılan her peer için anlık olarak bildirim almasını belirler
  • notifyActionEjected Odadan ayrılan her peer için anlık olarak bildirim almasını belirler
  • autoFetchInfo Oda ile ilgili bilgilerin frontend tarafında otomatik güncellemesini ayarlar
  • ifexistsJoin Create aşamasında eğer oda zaten varsa join olmak istediğini belirtir

Daha gelişmiş ayar

Odaya oluşturma, katılma, ayrılma ve kapatma

// Odayı oluşturmak veya katılmak için öncelikle meta bilgileri gerekiyor
// MWSEde oda üst bilgisi için mwse.room yetiyor
let room = mwse.room({
    name: "room-global-mm3-y5e",
    description: "Empty description",
    joinType: "free",
    ifexistsJoin: true
});

// Odayı oluşturmak için .createRoom() yetiyor
// Oda bu aşamada oluşturulur veya hata fırlatır
await room.createRoom();


// Var olan bir odaya katılmak için join() komutu yeterlidir
await room.join();

// Odadan ayrılmak için eject() yeterlidir
await room.eject();


// MWSE içerisinde tüm odalar en az 1 peer gerektirir, tüm peerler bir odadan çıktığında oda otomatik kapatılır. Bu işlem odadaki son peerin çıkması ile anlık gerçekleşir.


Odayı kullanma

Mesaj gönderme

MWSEde bir grup peere mesaj göndermenin en hızlı pratik yolu peerleri bir oda içine ekleyip oda içerisine mesaj bırakmaktadır, bu işlem clientin tüm peerler için ayrı ayrı mesajlar oluşturup göndermesi yerine verinin sunucuya bir kez gidip mesajın sunucudan kopyalanarak gönderilmesine sebep olur.

Bu durum frontend tarafında çoklu kişilere mesaj gönderilmesi konusunda yüksek hızlı veri iletişimi gerçekleştirilmesini sağlar.

Odada sizde var olduğunuz için odaya gönderilen odanın üyesi olarak tekrar size gönderilmemesi için özel algoritma vardır, yankı yapmayacaktır

Mesaj gönderme işlemi send() fonksiyonu tarafından yapılır ve JSON apisi tarafından stringify edilebilen tüm objeleri iletebilir.


// string
room.send("Hi !");
// Object
room.send({
    type: "message"
});
// Array
room.send([1,2,3,4]);
// Boolean
room.send(true);
// Number / BigNumbers
room.send(758.03);

Gelen mesajı işleme

Client tarafında herhangi bir room.send işleminde iletilen veriyi yakalamak için bir fonksiyon sunmanız yeterlidir. Bu event, oda içerisindeki tüm peerlerin odaya ilettiği mesajları tek noktadan verecektir.

MWSE oda içerisinde gönderilen mesajın orjinal içeriği ile beraber gönderen peerin objesinide verir

room.on('message',(message, peer) => {
	console.log(message) // room.send ile gönderilen verinin kendisi
    console.log(peer) // Mesajı gönderen peerin kendisi
})

room.send ile gönderilen mesaj ile room objesinde message eventinde alacağınız message verisinin tamamen aynı olacağını unutmayın room.send(1) komutunun çalıştırılması sizin mesaj olarak sayı tipinde 1 verisi almanıza neden olur. Uygulama katmanında tüm clientlerin verilerini işlemekle Developer sorumludur

Ortak bir veri tipi belirlenmesi veyahut gelen mesajın veri tipinin kontrol (typecheck) edilmesi gerekir.

Odadaki peerler

Oda içerisindeki tüm peerleri alma

// Odadaki tüm peerlerin listesini döner
let peers : Peer = await room.fetchPeers();

// Odadaki tüm peerleri Info değerindeki veriye göre filtreleyerek verir
// Örnekte peer.info verisinde gender:"Male" olan kişileri dönecektir
let peers : Peer = await room.fetchPeers({
   gender: "Male"
});

// İkinci parametre olarak true verilmesi 
// Sistemin kullanıcılar yerine odadaki kişilerin sayısını
// dönmesini sağlar. Yine filtre parametresi çalışır durumdadır
let peerCount : number = await room.fetchPeers(null, true);

Odaya katılan peer

MWSE odaya yeni katılan her yeni peer için anlık bildirilmesi için event sunar

Event odanın başlangıcında yerleştirilmişse tüm katılmalardan haberiniz olacaktır ancak sonradan yerleştirilmiş eventlerde zaten o andan itibaren odaya katılanlar bilidirilir, öncekiler geriye dönük tekrar tetiklenmez

room.on('join', peer => {
	peer.send("Hi!")
	// Odaya katılan peer
})

Odaya katılan peer / odadan ayrılan peerler

MWSE odaya yeni katılan her yeni peer için anlık bildirilmesi için event sunar

room.on('join', peer => {
	peer.send("Hi!")
	// Odaya katılan peer
})

MWSE odadan ayrılan her yeni peer için anlık bildirilmesi için event sunar

room.on('eject', peer => {
	// peer.send("Hi!") artık çalışmaz
	// Ancak yinede peer.info.get çalışır
})

MWSE tarafında oda kapatılmışsa bildirilir. Teknik olarak bu event hiç çalışmayacaktır çünki MWSE sisteminde odalar sadece içerisinde peer olmadığı anda kapatılırlar. Bu yüzden odadan tüm peerlar çıktığında MWSE sistemi close eventini iletecek peer bulamayacaktır :D

room.on('close', () => { /*  */ })

Oda oturum bilgisi yönetme ve okuma

Odaların isimleri ve açıklamaları dışında eğer odalara özellikler atayacaksanız MWSE geliştiricilere RoomInfo apisi sunar bu api get/set/Listen şeklinde çalışır ve key/value şeklinde tutulur

// oda bilgisinin güncellemesini beklemek geliştirici insiyatifindedir
// beklenmesi gerekmiyorsa await kaldırılabilir
// Burdaki await keywordu sunucu onayladığı anda Resolve olur tüm peerlere dağıtılması beklenmez
await room.info.set("token","74e84ad6....510c1b");

// Oda içerisinde session ile ilgili bir veri alma
await room.info.get("token") // --> "74e84ad6....510c1b"

// Odanın içerisindeki session bilgisini sunucudan tekrar çekmek için fetch komutu ile güncelleyebilirsiniz
await room.info.fetch()

room.on('updateinfo',(name, value)=>{
	// name = "token"
    // value = "74e84ad6....510c1b"
})

Odalarda info ayarını belirleme konusunda rol sistemi yoktur herkes okur veya değiştirebilir