我已经构建了一个托管(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();
}
}
答案 0 :(得分:0)
这就是我所做的,你可以试试:
使用以下结构在form1中创建一个arraylist:connectionID,loginID,ServerSideEncryptedLoginPW。
在onconnected期间(当登录前连接任何客户端时),使用(connectionID,空,空)向arraylist添加元素。
在集线器中添加登录功能。客户端调用此函数后,更新该特定connectionID的arraylist中的LoginID和加密的LoginPW。 (检查数据库中的密码,如果有的话)
,删除该特定connectionID的arraylist中的元素。
对于Hub中的其他功能,客户端必须提供LoginID和加密密码。
在Windows窗体中,当某些内容发生变化时,会在arraylist中显示值,例如:没有。连接的客户,没有。登录的客户端,客户端的LoginID列表等
类似的东西!