SignalRはサーバとクライアントのリアルタイム通信を実現する
まず関連DLLを参照
2 StartupファイルはSignalRのエントリです
SignalRのJSファイルの3組
四具体的な業務を実現するコアクラスファイル、それはHubを統合する必要があり、特性HubNameを使用してSignalRに名前を付けて、クライアントでそれを呼び出す必要がある
五コアJS機能コード断片
静的クラス
public static class BroadCast { public static void SendAllMessage(string name, string mes) { IHubContext chat = GlobalHost.ConnectionManager.GetHubContext(); chat.Clients.All.broadcastMessage(name, mes); }
}
2 StartupファイルはSignalRのエントリです
using Microsoft.Owin;using Owin;
[assembly: OwinStartup(typeof(SignalR.Core.Startup))]namespace SignalR.Core
{ public class Startup
{ public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
SignalRのJSファイルの3組
四具体的な業務を実現するコアクラスファイル、それはHubを統合する必要があり、特性HubNameを使用してSignalRに名前を付けて、クライアントでそれを呼び出す必要がある
using Microsoft.AspNet.SignalR;using Microsoft.AspNet.SignalR.Hubs;using SignalR.Core.Model;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Web;namespace SignalR.Core
{
[HubName("UrlHub")] public class UrlValid : Hub
{ static List ConnectedUsers = new List(); public void Connect(string url,string userID)
{ var id = Context.ConnectionId;if (ConnectedUsers.Count(x => x.ConnectionId == id) == 0)
{
ConnectedUsers.Add(new CurrentUser
{
ConnectionId = id,
UserID = userID,
});
Clients.Caller.onConnected(id, userID, url); //Clients.AllExcept(id).onNewUserConnected(id, userID);
Clients.Client(id).onNewUserConnected(id, userID);
} else
{
Clients.Caller.onConnected(id, userID, url);
Clients.Client(id).onExistUserConnected(id, userID); // Clients.AllExcept(id).onExistUserConnected(id, userID); }
} ///
/// ///
public void Exit(string userID)
{ var id = Context.ConnectionId;
OnDisconnected();
Clients.Caller.onConnected(id, userID, "");
Clients.Client(id).onExit(id, userID);
} ///
/// ///
///
public override System.Threading.Tasks.Task OnDisconnected()
{ var item = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId); if (item != null)
{
ConnectedUsers.Remove(item); var id = Context.ConnectionId;
Clients.All.onUserDisconnected(id, item.UserID);
} return base.OnDisconnected();
}
}
}
五コアJS機能コード断片
$(function () { // Declare a proxy to reference the hub
var chatHub = $.connection.UrlHub;
registerClientMethods(chatHub); // Start Hub $.connection.hub.start().done(function () {
registerEvents(chatHub);
});
}); // function registerEvents(chatHub) {
$("#btn").click(function () { var url = "dasfjasldfj";
chatHub.server.connect(url);
});
$("#logOut").click(function () {
chatHub.server.exit();
});
} // function registerClientMethods(chatHub) {
chatHub.client.onConnected = function (id, userID, url) {
console.log(" " + url);
}
chatHub.client.onUserDisconnected = function (id, userID) {
console.log(" ");
}
chatHub.client.onNewUserConnected = function (id, userID) {
alert(" ");
}
chatHub.client.onExistUserConnected = function (id, userID) {
alert(" " + userID + " ");
}
chatHub.client.onExit = function (id, userID) {
alert(" " + userID + " !");
}
}
静的クラス
public static class BroadCast { public static void SendAllMessage(string name, string mes) { IHubContext chat = GlobalHost.ConnectionManager.GetHubContext(); chat.Clients.All.broadcastMessage(name, mes); }
}