我已经构建了一个托管(OWIN)的Windows窗体集线器,所以不仅充当代理,它将作为客户端,因为我想要一个小窗口窗体,显示其他客户端连接。SignalR集线器Windows窗体 - 新手
我正在努力的位是主机客户端“侦听”以及如何记录连接的机器。 我只想写出消息到我的文本框
因此,这是我迄今为止所做的,即时通讯在相同的窗体上运行client \ hub。
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();
}
}
[HubName("chat")]
public class ChatHub : Hub
{
public void SendMessage(string message)
{
var msg = String.Format(
"{0}: {1}", Context.ConnectionId, message);
Clients.All.newMessage(msg);
}
public override Task OnConnected()
{
return base.OnConnected();
}
public void Send(ChatMessage message)
{
// Call the addMessage method on all clients
Clients.All.addMessage(message.Msg);
Clients.Group(message.GroupName).newMessage("Group Message " + message.Msg);
}
}