Node.js – Websocket’te Client’ın Girdiği Odaları Liste Olarak Elde Etme

Merhaba,

Node.js’de, websocket çalışması yaparken herhangi bir clientın girdiği odaları liste olarak elde etmeyi istiyorsanız eğer sizlere rehber olabilecek en doğru içeriktesiniz demektir 🙂

İlk olarak aşağıdaki websocket çalışmasını baz alarak içeriğimize başlarsak eğer;

const http = require("http");
const socket = require("socket.io");

const server = http.createServer((request, response) => response.end("..."));
const io = socket.listen(server.listen(5000, () => console.log("Started...")));

const roomNameSpace = io.of("/rooms");
roomNameSpace.on("connection", socket => {
    console.log("Connected...");
    socket.on("disconnect", () => console.log("Disconnected..."));
    socket.join("Room1");
    socket.join("Room2");
    socket.join("Room3");
    socket.on("getRooms", () => {
        console.log(socket.rooms);
    });
});

görüldüğü üzere client “Room1”, “Room2” ve “Room3” olmak üzere üç farklı odaya giriş yapmakta ve “getRooms” eventına talep neticesinde bu odalar console’a yazdırılmaktadır. Bakalım bu yazdırma neticesinde nasıl bir formatta veriyle karşılaşılmaktadır?
Node.js - Websocket'te Client'ın Girdiği Odaları Liste Olarak Elde Etme
Dikkat ederseniz eğer;

{ 
  '/rooms#fCxJKeepd6kwnL36AAAA': '/rooms#fCxJKeepd6kwnL36AAAA',
  Room1: 'Room1',
  Room2: 'Room2',
  Room3: 'Room3' 
}

formatında bir json verisi içerisinde odalarımızın bilgisi gelmektedir.

İşte bizler bu veri üzerinde gerekli parse işlemlerini uygulayarak odaları ayıklamalı ve düzenli bir liste olarak elde edebilmeliyiz. Bu işlem için her ne kadar kendi geliştirdiğiniz algoritmaları vs. devreye sokabileceğiniz gibi sizleri bu zahmetten arındıran JavaScript dilinin Object.keys komutunu da kullanabilirsiniz.

Object.keys Komutu

Elimizdeki;

let dizi = [{ "0": "a" }, { "1": "b" }, { "2": "c" }, { "3": "ç" }, { "4": "d" }];

formatındaki diziyi bizlere;

[ '0', '1', '2', '3', '4' ]

şeklinde dönen bir fonksiyondur. Benzer mantıkla elimizdeki dizinin değeri aşağıdaki gibi olursa;

let dizi = ['a', 'b', 'c', 'd'];

bu sefer değerler yerine aşağıdaki gibi index numaralarını döndürecektir;

[ '0', '1', '2', '3' ]

Haliyle “socket.rooms” komutu neticesinde gelen oda verileri, Object.keys komutu sayesinde kolay sadeleştirilebilir bir formatta elde edilmektedir.

Dolayısıyla Object.keys fonksiyonunu aşağıdaki gibi elde ettiğim odalara uygulamaktayım.

const http = require("http");
const socket = require("socket.io");

const server = http.createServer((request, response) => response.end("..."));
const io = socket.listen(server.listen(5000, () => console.log("Started...")));

const roomNameSpace = io.of("/rooms");

roomNameSpace.on("connection", socket => {
    console.log("Connected...");
    socket.on("disconnect", () => console.log("Disconnected..."));
    socket.join("Room1");
    socket.join("Room2");
    socket.join("Room3");
    socket.on("getRooms", () => {
        console.log(Object.keys(socket.rooms));
    });
});

İşlem neticesinde clientın giriş yaptığı tüm odaların bilgilerini aşağıdaki ekran görüntüsünde olduğu gibi elde etmiş bulunmaktayız.
Node.js - Websocket'te Client'ın Girdiği Odaları Liste Olarak Elde Etme

Haliyle bu bilgileri client’ta listelemek isterseniz aşağıdaki gibi bir çalışma yapmanız yeterli olacaktır.

const http = require("http");
const socket = require("socket.io");

const server = http.createServer((request, response) => response.end("..."));
const io = socket.listen(server.listen(5000, () => console.log("Started...")));

const roomNameSpace = io.of("/rooms");

roomNameSpace.on("connection", socket => {
    console.log("Connected...");
    socket.on("disconnect", () => console.log("Disconnected..."));
    socket.join("Room1");
    socket.join("Room2");
    socket.join("Room3");
    socket.on("getRooms", () => {
        socket.emit("getRooms", Object.keys(socket.rooms));
    });
});
<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
    <script>
        const socket = io.connect("http://localhost:5000/rooms");
        $(() => {
            $("#btnGetRooms").click(() => {
                socket.emit("getRooms");
                socket.on("getRooms", allRooms => {
                    let html = "";
                    debugger
                    $.each(allRooms, (i, n) => html += `<li>${n}</li>`);
                    $("#ulAllRooms").html(html);
                });
            });
        });
    </script>
</head>
<body>
    <button id="btnGetRooms">Get Rooms</button>
    <ul id="ulAllRooms"> </ul>
</body>
</html>

Node.js - Websocket'te Client'ın Girdiği Odaları Liste Olarak Elde Etme

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.