Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | Others

Merhaba,

SignalR Hub sınıfları, client ile server arasında eşzamanlı etkileşimi kurabilmek ve server’a bağlı olan client’lar arasında isteğe özel farklı davranışlar sergileyebilmek için Caller, All ve Others özelliklerini içermektedir. Bu içeriğimizde, bu özelliklerin davranışlarını detaylarıyla inceleyecek ve ardından genel olarak kullanılan metotları değerlendireceğiz.

Client Türleri
Davranışa göre client türleri yukarıda da bahsedildiği gibi Caller, All ve Others olmak üzere üçe ayrılır;

Caller
Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | Others
Sadece server’a bildirim gönderen client’la iletişim kurar.

    public class MyHub : Hub
    {
        public async Task SendCallerMessage(string message)
        {
            await Clients.Caller.SendAsync("receiveMessage", message);
        }
    }
All
Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | Others
Server’a bağlı olan tüm client’lara bildiri gönderir.

    public class MyHub : Hub
    {
        public async Task SendAllMessage(string message)
        {
            await Clients.All.SendAsync("receiveMessage", message);
        }
    }
Others
Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | Others
Server’a bildirim gönderen client hariç diğer tüm client’lara bildirim gönderir.

    public class MyHub : Hub
    {
        public async Task SendOthersMessage(string message)
        {
            await Clients.Others.SendAsync("receiveMessage", message);
        }
    }

İlgili propertylerin davranışlarını sergilemek için aşağıdaki görselleri inceleyebilirsiniz…

Caller All Others
Asp.NET Core - SignalR Serisi #8 - Clients Türleri ve Kullanılan Metotlar - Caller | All | Others Asp.NET Core - SignalR Serisi #8 - Clients Türleri ve Kullanılan Metotlar - Caller | All | Others Asp.NET Core - SignalR Serisi #8 - Clients Türleri ve Kullanılan Metotlar - Caller | All | Others

İleti Gönderim Metodu(SendAsync)
İleti gönderim metodu yukarıdaki Caller, All ve Others özelliklerinden kullanılanın davranışlarına göre şekillenmekle birlikte sade ve sadece ‘SendAsync’den ibarettir.

SendAsync aşağıdaki varyasyonlar eşliğinde kullanılır;

  • await Clients.Caller.SendAsync("receiveMessage", message);
    Sadece ilgili Hub’a ileti gönderene ileti gönderir.
  • await Clients.All.SendAsync("receiveMessage", message);
    Hub’a bağlı tüm client’lara ileti gönderir.
  • await Clients.Others.SendAsync("receiveMessage", message);
    Hub’a ileti gönderen dışındaki tüm client’lara ileti gönderir.

Hub Clients Metotları
Hub üzerinden etkileşime geçilecek olan client’lar ile özelleştirilmiş davranışlar sergileyebilmek için kullanılan metotlardır.

  • AllExcept
    Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | Others
    Belirtilen client’lar hariç server’a bağlı tüm client’lara bildiride bulunur.

        public class MyHub : Hub
        {
            public async Task AllExceptSendMessage(string[] excludedClients, string message)
            {
                await Clients.AllExcept(excludedClients).SendAsync("receiveMessage", message);
            }
        }
    
  • Client
    Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | Others
    Server’a bağlı olan client’lar arasından sadece belirli bir client’a bildiride bulunur.

        public class MyHub : Hub
        {
            public async Task ClientSendMessage(string connectionId, string message)
            {
                await Clients.Client(connectionId).SendAsync("receiveMessage", message);
            }
        }
    
  • Clients
    Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | OthersServer’a bağlı olan client’lar arasından sadece belirtilenlere bildiride bulunur.

        public class MyHub : Hub
        {
            public async Task ClientsSendMessage(string[] clients, string message)
            {
                await Clients.Clients(clients).SendAsync("receiveMessage", message);
            }
        }
    
  • Group
    Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | OthersBelirtilen gruptaki tüm client’lara bildiride bulunur.

        public class MyHub : 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
    Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | OthersBelirtilen grupta, belirtilen client’lar dışındaki tüm client’lara bildiride bulunur.

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

    Not: Tüm metotlara dair UI ve Server olmak üzere ikili örneklendirmeleri makalenin en sonundaki örnek proje(leri) indirerek inceleyebilirsiniz. Bunlardan en kapsamlısı GroupExcept için yapılan örneklendirmedir. Özellikle incelemenizi tavsiye ederim.

  • Groups
    Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | OthersBirden çok gruptaki client’lara bildiride bulunur.

        public class MyHub : Hub
        {
            public async Task GroupsSendMessage(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
    Asp.NET Core – SignalR Serisi #8 – Clients Türleri ve Kullanılan Metotlar – Caller | All | OthersBildiride bulunan client haricinde gruptaki tüm client’lara bildiride bulunur.

        public class MyHub : Hub
        {
            public async Task OthersInGroupSendMessage(string groupName, string message)
            {
                await Clients.OthersInGroup(groupName).SendAsync("receiveMessage", message);
            }
        }
    
  • User
    Authentication olan kullanıcıyla ilişkili tüm client’lara bildiride bulunur.
  • Users
    Authentication olan kullanıcılarla ilişkili tüm client’lara bildiride bulunur.

‘User’ ve ‘Users’ metotlarını ileride SignalR ile Authentication ve Authorization konularını ele alırken inceleyeceğiz.

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

Not: Örnek projeleri indirmek için aşağıdaki linklere tıklayınız.

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

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

*