1

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);
    } 
}
}
4

1 に答える 1

1

Groups.Add はすぐにグループへの接続に参加するのではなく、開始する必要がある Task を返すようです。Groups.Add の結果を OnConnectedMethod の結果として返してみてください。

https://stackoverflow.com/a/15469038/174638の詳細な説明も参照してください。

于 2013-03-18T00:22:20.660 に答える