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 yukarıda kısaca bahsettiğim gibi 3 kısma ayrılır;
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 Caller, All ve Others yukarıda kullanılan özelliklerin gösterdikleri tutumlarına göre hareket eden bir metoddur.
SendAsync metodunun şu şekilde kullanabilirsiniz;
await Clients.Caller.SendAsync("callerMessage", message);
await Clients.All.SendAsync("allMessage", message);
await Clients.Others.SendAsync("othersMessage", message);
Hub üzerinden bağlantı kuracak client'lar ile customize edilmiş ( özelleştirilmiş ) davranışlar göseterebilmek için kullanılan metodlardır.
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 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 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 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 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 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 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 metodu ile Authnetication olan clinet ile bağlantılı tüm client'lara bildiride bulunur.
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.
Blog Listesi