Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Fleck-从服务器发送数据_C#_.net_Websocket - Fatal编程技术网

C# 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

今天,我们有一个完全以桌面为中心的基于事件的应用程序。我们希望移动到web,并使用Fleck使用web套接字驱动事件。在fleck中,我无法理解如何将消息从服务器异步发送到客户端。下面是我试图实现的示例

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?