2014-01-06 3 views
0

Я хочу широковещать сообщение, используя SignalR от сервера ко всем клиентам в определенное время сервера. Это широковещательное сообщение должно быть автоматическим, когда все клиенты продолжают слушать метод сервера, и как только мы достигнем запланированного времени на сервере, сервер должен транслировать сообщение.Вещание сообщения клиенту в запланированное время с использованием SignalR

Но я не могу найти пути к этому. Я был успешным, вызывая от клиента и передавая его всем клиентам, но не автоматически.

Как это можно достичь.

+0

вы можете вызывать один раз каждые x секунд от клиента и видеть isTimeToBroadCast? – Esen

+0

Не уверен, что вы хотите использовать SignalR для этого. На самом деле он довольно ортогонален самому SignalR. Написание кода, выполняющегося с интервалом, действительно то, что вам нужно сделать. Вероятно, есть библиотека .NET, которую вы могли бы использовать для планирования кода для запуска через некоторое время (хотя это никогда не будет действительно в реальном времени) – davidfowl

ответ

0

Вы можете просто добавить таймер к вашему классу концентратора и транслировать каждому клиенту с требуемыми интервалами.

1

Сначала вам нужно какое-хаб:

public class MyHub : Hub {} 

Затем вы можете подключиться к этому концентратору с клиентами или что вы хотите сделать. Затем вам нужен какой-то тип цикла, который отправляется в ваш концентратор (вы также можете сделать это в хабе как статический таймер, но мы сделаем это как отдельный класс).

public class Looper 
{ 
    public Timer Interval 

    public Looper(TimeSpan interval) 
    { 
     Interval = new Timer(Loop, null, TimeSpan.Zero, interval); 
    } 

    private static void Loop(object state) 
    { 
     GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients.All.executeYourMethod(); 
    } 
} 

Теперь нам нужно создать экземпляр этого класса где-нибудь, мы будем делать, что внутри наш хаб как статические:

public class MyHub : Hub 
{ 
    public static Looper MyInterval = new Looper(TimeSpan.FromSeconds(1)); // Send every 1 second 
} 

Надеется, что это помогает!

Смежные вопросы