SignalR Hubs Windows窗体 - 新手

时间:2015-06-25 16:16:43

标签: signalr signalr-hub

我已经构建了一个托管(OWIN)Windows窗体中心,所以不仅仅是作为一个代理,它将成为一个客户端,因为我希望有一个小窗口窗体,显示其他客户端连接的内容。

我挣扎的是主持人客户"倾听"以及如何记录连接的机器。 我只想把信息写到我的文本框

所以这就是我到目前为止所做的,我在同一个窗体上运行client \ hub。

function Struct (...) {
public partial class Form1 : Form
{
    private IDisposable SignalR { get; set; }
    private HubConnection hubConnection;
    private IHubProxy chat;
    const string URL = "http://localhost:8080";

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Task.Run(() => StartServer());
        //Task.Run(() => RegisterServerConnection());
    }

    private void StartServer()
    {
        try
        {
            SignalR = WebApp.Start(URL);
        }
        catch (TargetInvocationException)
        {

        }
        this.Invoke((Action) (() => richTextBox1.AppendText("Server running on " + URL)));


    }

    private async void RegisterServerConnection()
    {
        hubConnection = new HubConnection(URL);
        hubConnection.GroupsToken = "RoomA";

        chat = hubConnection.CreateHubProxy("chat");

        int timeout = 10000;
        var task = hubConnection.Start();
        if (await Task.WhenAny(task, Task.Delay(timeout)) == task)
        {
            // await chat.Invoke<ConnectionModel>("clientConnected", connectionModel);
            this.Invoke((Action)(() => richTextBox1.Text+="Connected"));
            //  this.Hide();
        }
        else
        {
            this.Invoke((Action)(() => richTextBox1.AppendText("Unable to connect.")));
        }


        chat.Invoke<ChatMessage>("send", new ChatMessage() { Msg = "Host Running", GroupName = "Host" });
    }

    private void btnGo_Click(object sender, EventArgs e)
    {
        RegisterServerConnection();
    }



}

1 个答案:

答案 0 :(得分:0)

这就是我所做的,你可以试试:

  1. 使用以下结构在form1中创建一个arraylist:connectionID,loginID,ServerSideEncryptedLoginPW。

  2. 在onconnected期间(当登录前连接任何客户端时),使用(connectionID,空,空)向arraylist添加元素。

  3. 在集线器中添加登录功能。客户端调用此函数后,更新该特定connectionID的arraylist中的LoginID和加密的LoginPW。 (检查数据库中的密码,如果有的话)

  4. 在ondisconnected期间
  5. ,删除该特定connectionID的arraylist中的元素。

  6. 对于Hub中的其他功能,客户端必须提供LoginID和加密密码。

  7. 在Windows窗体中,当某些内容发生变化时,会在arraylist中显示值,例如:没有。连接的客户,没有。登录的客户端,客户端的LoginID列表等

  8. 类似的东西!