SignalR を使用して最初のテストを行っています。私はチャット メッセージをいじっていますが、それは現在私のサイトにあるクライアントからサーバーへのすべてのポーリングを置き換えるための最初のステップにすぎません。
特定のユーザーにログインまたは ID で通知したいシナリオがたくさんあります。アイデアは、各ユーザーが接続したらすぐに 2 つのグループに追加するというものです。OnConnected でこれを行うと、そのイベントが呼び出されます。
チャット メッセージを送信するとき、公開モードと個人モードの 2 つのモードがあります。個人的な場合は、送信者に通知され、受信者にも通知されます。送信者はメッセージを受け取りますが、グループは受け取りません。グループのメンバー数を知ることは不可能のようです。
ここで何がうまくいかないのですか?
public class GlobalHub:Hub
{
private Users user;
private void AuthenticateUser()
{
var ydc = new MyDataContext();
user = ydc.Users.First(u => u.Login == HttpContext.Current.User.Identity.Name);
}
public override Task OnConnected()
{
var ydc = new MyDataContext();
user = ydc.Users.First(u => u.Login == HttpContext.Current.User.Identity.Name);
Groups.Add(Context.ConnectionId, user.Login);
Groups.Add(Context.ConnectionId, user.ID.ToString());
return base.OnConnected();
}
public void SendChatMessage(string message, string recipient)
{
AuthenticateUser();
var cm = ChatController.AddChatMessage(user.Login, user.ID, recipient, tmessage);
if (recipient != "")
{
Clients.Caller.NewMessage(cm);
Clients.Group(recipient).NewMessage(cm);
}
else
{
Clients.All.NewMessage(cm);
}
}
}