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
nameOdanın ismidir ve tekildirdescriptionOdanın açıklamasıjoinTypeodaya katılma metodunu belirlerfreeodaya herkes anında katılabilirinvitebir peer odaya sadece başka bir peerin davet/kabul işlemiyle dahil edebilirpasswordbir şifreyi bilen herkes katılabilirlockoda katılma durumlarına kapalı, kimse katılamazaccessTypeodanın herkese açık olup olmadığıpublicherkese açık,privategizli oda
Odayı oluşturan veya katılmak isteyen peerin yapacağı ayarlar bunlardır
credentialodanın şifresinotifyActionInviteDavet bildirimlerin almak isteyip istemediğini belirtirnotifyActionJoinedOdaya katılan her peer için anlık olarak bildirim almasını belirlernotifyActionEjectedOdadan ayrılan her peer için anlık olarak bildirim almasını belirlerautoFetchInfoOda ile ilgili bilgilerin frontend tarafında otomatik güncellemesini ayarlarifexistsJoinCreate 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
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.
Frontend API
- mwse.server : Connection
- mwse.WSTSProtocol : WSTSProtocol
- mwse.EventPooling : EventPool
- mwse.rooms : Map<string, Room>
- mwse.pairs : Map<string, Peer>
- mwse.peers : Map<string, Peer>
- mwse.virtualPressure : VirtualPressure
- mwse.me : Peer
- mwse.destroy
- mwse.enableRecaiveData
- mwse.disableRecaiveData
- mwse.enableSendData
- mwse.disableSendData
- mwse.enableNotifyRoomInfo
- mwse.disableNotifyRoomInfo
- mwse.request
- mwse.response
- mwse.room
- mwse.peer