Asp.Net Core SignalR 7 - SignalR'da Cilent Türleri

Asp.Net Core SignalR 7 - SignalR'da Cilent Türleri

Blog Asp.Net Core SignalR 7 - SignalR'da Cilent Türleri

Asp.Net Core SignalR 7 - SignalR'da Cilent Türleri

SelamünAleyküm, geçtiğimiz yazıda SignalR'da IHubContext kullanımını ele almıştık. Bu yazıda ise kullanılan clients türlerini ele alacağız.

Hub class'rımız, client ile server arasında realtime ( gerçek zamanlı ) etkileşim sağlamak ve server'a bağlanan clientlar arasındaki requestlere ( isteklere ) hususi bir tavır gösterebilmesi için Caller, All ve Others özellikleri kullanılır.

Client Türleri

Client Türleri yukarıda kısaca bahsettiğim gibi 3 kısma ayrılır;

  1. Caller,
  2. All,
  3. Others

Caller: Sadece server'a bildirim göndermek isteyen client ile iletişim sağlar.

public async Task CallerSendAsync(string message)
{
    await Clients.Caller.SendAsync("receiverCallerMessage", message);
}

All: Server'a bağlı tüm client'lara bildirim gönderir.

public async Task AllSendAsync(string message)
{
    await Clients.All.SendAsync("receiverAllMessage", message);
}

Others: Server'a bildirim gönderen client hariç server'a bağlı tüm client'lara bilidiri gönderir.

public async Task OtherSendAsync(string message)
{
    await Clients.Others.SendAsync("receiverOtherMessage", message);
}

SendAsync Metodu

SendAsync metodu Caller, All ve Others yukarıda kullanılan özelliklerin gösterdikleri tutumlarına göre hareket eden bir metoddur.

SendAsync metodunun şu şekilde kullanabilirsiniz;

  • Sadece Hub'a bilidiride bulunmak için:
await Clients.Caller.SendAsync("callerMessage", message);
  • Hub'a bağlı tüm client'lara bildiride bulunmak için:
await Clients.All.SendAsync("allMessage", message);
  • Hub'a bildirim gönderen hariç Hub'a bağlı tüm client'lara biliride bulunmak için:
await Clients.Others.SendAsync("othersMessage", message);

Client Metotları

Hub üzerinden bağlantı kuracak client'lar ile customize edilmiş ( özelleştirilmiş ) davranışlar göseterebilmek için kullanılan metodlardır.

AllExcept

AllExcept metodu ile Hub'a bağlı olupta bildirimi gönderen client aracılığı ile hariç tutulan client'lar haricinde diğer client'lara bildiride bulunmak için kullanılır.

public class TestHub : Hub
{
    public async Task AllExceptMessage(string[] excludedClients, string message)
    {
        await Clients.AllExcept(excludedClients).SendAsync("receiveMessage", message);
    }
}
Client

Client metodu ile Hub'a bağlı olan client'ların sadece belirtilen bir client'a bildiride bulunmak için kullanılır.

public class TestHub : Hub
{
    public async Task ClientMessage(string connectionId, string message)
    {
        await Clients.Client(connectionId).SendAsync("receiveMessage", message);
    }
}
Clients

Clients metodu ile Hub'a bağlı olan client'ların sadece belirtilen client'lara bildiride bulunmak için kullanılır.

public class TestHub : Hub
{
    public async Task ClientMessage(string[] users, string message)
    {
        await Clients.Clients(users).SendAsync("receiveMessage", message);
    }
}
Group

Group metodu ile var olan grupların sadece belirtilen grubun tüm client'larına bildiride bulunmak için kullanılır.

public class TestHub : Hub
{ 
    public async Task AddToGroup(string groupName)
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
    }
    public async Task GroupSendMessage(string groupName, string message)
    {
        await Clients.Group(groupName).SendAsync("receiveMessage", message);
    }
}
GroupExcept

GroupExcept metodu ile seçili gruptaki, hariç tutulan bütün client'lara bildiride bulunmak için kullanılır.

public class TestHub : Hub
{
    public async Task AddToGroup(string groupName)
    {
        await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
    }
    public async Task GroupExceptMessage(string groupName, string[] excludedClients, string message)
    {
        await Clients.GroupExcept(groupName, excludedClients).SendAsync("receiveMessage", message);
    }
}
Groups

Groups metodu ile birden fazla gruptaki clientlara bildiride bulunmak için kullanılır.

public class TestHub : Hub
{
    public async Task GroupsMessage(string[] groupNames, string message)
    {
        await Clients.Groups(groupNames).SendAsync("receiveMessage", message);
    }
    public async Task GetGroupsClients(string[] groupsName)
    {
        List<string> datas = new List<string>();
        foreach (var groupName in groupsName)
        {
            datas.AddRange(groupClients.Where(g => g.GroupName == groupName).Select(c => c.ConnectionId).ToList());
        }
        await Clients.Caller.SendAsync("getGroupClients", datas);
    }
}
OthersInGroup

OthersInGroup metodu ile grupta bildiride bulunan client hariç gruptaki tüm client'lara bildiride bulunmak için kullanılır.

public class TestHub : Hub
{
    public async Task OthersInGroupMessage(string groupName, string message)
    {
        await Clients.OthersInGroup(groupName).SendAsync("receiveMessage", message);
    }
}
Users

Users metodu ile Authnetication olan clinet ile bağlantılı tüm client'lara bildiride bulunur.

Users

Authentication olan client'larla ilişkili tüm client’lara bildiride bulunur.

Bu yazımızın sonuna geldik. Bu yazıda SignalR'a ait client türlerini ele aldık. İlgili projenin github adresine buradan ulaşabilirsiniz. İlgilenenlerin faydalanması ümidiyle.

Hiç yorum Yorum yapılmamış, İlk yorumu sen yap.

Yorum Yap


Bize Ulaşın

Merkez / Mardin

support@technoguide.com.tr

+90 551 859 8721

Haber Bültenİ

Haber Bültenİmİze Kaydolun

Yazılım, teknoloji ve daha fazlası için bizi takip edin.

© Techno Guide. Tüm Hakları Saklıdır.

HTML Codex Tasarımıdır.