C# Fleck-从服务器发送数据
今天,我们有一个完全以桌面为中心的基于事件的应用程序。我们希望移动到web,并使用Fleck使用web套接字驱动事件。在fleck中,我无法理解如何将消息从服务器异步发送到客户端。下面是我试图实现的示例C# Fleck-从服务器发送数据,c#,.net,websocket,C#,.net,Websocket,今天,我们有一个完全以桌面为中心的基于事件的应用程序。我们希望移动到web,并使用Fleck使用web套接字驱动事件。在fleck中,我无法理解如何将消息从服务器异步发送到客户端。下面是我试图实现的示例 public class Program { static readonly WebSocketServer _webSocketServer = new WebSocketServer("ws://127.0.0.1:8181"); static readonly List&l
public class Program
{
static readonly WebSocketServer _webSocketServer = new WebSocketServer("ws://127.0.0.1:8181");
static readonly List<IWebSocketConnection> SocketClients = new List<IWebSocketConnection>();
static void Main(string[] args)
{
_webSocketServer.Start(socket =>
{
socket.OnOpen = () =>
{
SocketClients.Add(socket);
OnOpening(socket.ConnectionInfo.Id);
};
socket.OnClose = () =>
{
OnClosing(socket.ConnectionInfo.Id);
SocketClients.Remove(socket);
};
socket.OnMessage = message => OnMessage(message, socket.ConnectionInfo.Id);
});
Console.ReadLine();
}
private static void OnMessage(string message, Guid id)
{
Console.WriteLine("<i> Recived message " + message + " from Client Id : " + id + " </i>");
}
private static void OnClosing(Guid id)
{
Console.WriteLine("<i> Client Left With Id : " + id + "</i>");
}
private static void OnOpening(Guid id)
{
//Do Something
}
// CALL THIS METHOD FROM MY APPLICATION AND SEND THE MESSAGE TO CLIENT BASED ON THE ID
private static void SendMessage(string message, Guid id)
{
// HOW TO DO SOMETHING LIKE BELOW SEND MESSAGE ASYNC
//_webSocketServer.Start(socket =>
//{
// var clientToSend = SocketClients.Find(client => client.ConnectionInfo.Id == id);
// socket.Send(message);
//});
}
}
公共类程序
{
静态只读WebSocketServer_WebSocketServer=newWebSocketServer(“ws://127.0.0.1:8181”);
静态只读列表SocketClients=new List();
静态void Main(字符串[]参数)
{
_webSocketServer.Start(套接字=>
{
socket.OnOpen=()=>
{
SocketClients.Add(socket);
OnOpening(socket.ConnectionInfo.Id);
};
socket.OnClose=()=>
{
OnClosing(socket.ConnectionInfo.Id);
SocketClients.Remove(套接字);
};
socket.OnMessage=message=>OnMessage(message,socket.ConnectionInfo.Id);
});
Console.ReadLine();
}
私有静态void OnMessage(字符串消息,Guid id)
{
Console.WriteLine(“接收到的消息”+来自客户端Id的消息+”:+Id+);
}
私有静态void OnClosing(Guid id)
{
Console.WriteLine(“客户端左侧Id为:+Id+”);
}
打开时的专用静态无效(Guid id)
{
//做点什么
}
//从我的应用程序调用此方法,并根据ID将消息发送到客户端
私有静态void SendMessage(字符串消息,Guid id)
{
//如何像下面这样异步发送消息
//_webSocketServer.Start(套接字=>
//{
//var clientToSend=SocketClients.Find(client=>client.ConnectionInfo.Id==Id);
//socket.Send(消息);
//});
}
}
在他们的GitHub中有一个类似的例子:
我刚刚添加了SendToSocketById
方法>
class Server
{
static void Main()
{
FleckLog.Level = LogLevel.Debug;
var allSockets = new List<IWebSocketConnection>();
var server = new WebSocketServer("ws://0.0.0.0:8181");
server.Start(socket =>
{
socket.OnOpen = () =>
{
Console.WriteLine("Open!");
allSockets.Add(socket);
};
socket.OnClose = () =>
{
Console.WriteLine("Close!");
allSockets.Remove(socket);
};
socket.OnMessage = message =>
{
Console.WriteLine(message);
allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
};
});
var input = Console.ReadLine();
while (input != "exit")
{
foreach (var socket in allSockets.ToList())
{
socket.Send(input);
}
input = Console.ReadLine();
}
}
static void SendToSocketById(String input, Guid id)
{
var socket = allSockets.Find(client => client.ConnectionInfo.Id == id);
socket.Send(input);
}
}
类服务器
{
静态void Main()
{
FleckLog.Level=LogLevel.Debug;
var allSockets=新列表();
var server=newwebsocketserver(“ws://0.0.0.0:8181”);
server.Start(套接字=>
{
socket.OnOpen=()=>
{
控制台。WriteLine(“打开!”);
allSockets.Add(socket);
};
socket.OnClose=()=>
{
控制台。WriteLine(“关闭!”);
所有插座。拆下(插座);
};
socket.OnMessage=message=>
{
控制台写入线(消息);
allSockets.ToList().ForEach(s=>s.Send(“Echo:+message”);
};
});
var input=Console.ReadLine();
while(输入!=“退出”)
{
foreach(allSockets.ToList()中的var socket)
{
socket.Send(输入);
}
input=Console.ReadLine();
}
}
静态void SendToSocketById(字符串输入,Guid id)
{
var socket=allSockets.Find(client=>client.ConnectionInfo.Id==Id);
socket.Send(输入);
}
}
程序如何获取套接字的Guid?调用SendToSocketById?