C# WebSocketSharp 创建多个房间 添加用户,开启服务器,房间发送消息 详细代码
时间: 2024-03-20 21:39:44 浏览: 110
以下是使用 WebSocketSharp 在 C# 中创建多个房间、添加用户、开启服务器以及房间发送消息的详细代码:
首先,你需要在项目中安装 `WebSocketSharp` 库。在 Visual Studio 中,可以通过 NuGet 包管理器来安装。
接下来,创建一个 `ChatRoom` 类来表示一个聊天室:
```csharp
using System.Collections.Generic;
namespace WebSocketServer
{
public class ChatRoom
{
public string Name { get; }
public List<ChatUser> Users { get; }
public ChatRoom(string name)
{
Name = name;
Users = new List<ChatUser>();
}
public void AddUser(ChatUser user)
{
Users.Add(user);
}
public void RemoveUser(ChatUser user)
{
Users.Remove(user);
}
public void Broadcast(string message)
{
foreach (var user in Users)
{
user.Send(message);
}
}
}
}
```
`ChatRoom` 类包含一个名称和一个用户列表。它还有三个方法:`AddUser`、`RemoveUser` 和 `Broadcast`。
接下来,创建一个 `ChatUser` 类来表示一个聊天室用户:
```csharp
using WebSocketSharp;
using WebSocketSharp.Server;
namespace WebSocketServer
{
public class ChatUser : WebSocketBehavior
{
public string Name { get; set; }
public ChatRoom Room { get; set; }
protected override void OnOpen()
{
base.OnOpen();
Room.AddUser(this);
}
protected override void OnClose(CloseEventArgs e)
{
base.OnClose(e);
Room.RemoveUser(this);
}
protected override void OnMessage(MessageEventArgs e)
{
Room.Broadcast($"{Name}: {e.Data}");
}
public void Send(string message)
{
SendAsync(message, null);
}
}
}
```
`ChatUser` 类继承自 `WebSocketBehavior` 类,它包含一个用户名和一个聊天室属性。它还有四个方法:`OnOpen`、`OnClose`、`OnMessage` 和 `Send`。
`OnOpen` 方法在用户连接到服务器时被调用,将用户添加到聊天室中。`OnClose` 方法在用户断开连接时被调用,将用户从聊天室中移除。`OnMessage` 方法在用户发送消息时被调用,将消息广播给聊天室中的所有用户。`Send` 方法用于向用户发送消息。
现在,创建一个 `ChatServer` 类来管理聊天室和用户:
```csharp
using System.Collections.Generic;
using WebSocketSharp.Server;
namespace WebSocketServer
{
public class ChatServer
{
private readonly WebSocketServer _server;
private readonly List<ChatRoom> _rooms;
public ChatServer(string url)
{
_server = new WebSocketServer(url);
_rooms = new List<ChatRoom>();
_server.AddWebSocketService<ChatUser>("/", user =>
{
user.Room = _rooms[0];
user.Name = "Guest";
});
_server.Start();
CreateRoom("General");
}
public void CreateRoom(string name)
{
var room = new ChatRoom(name);
_rooms.Add(room);
_server.AddWebSocketService($"/{name}", user =>
{
user.Room = room;
user.Name = "Guest";
});
}
}
}
```
`ChatServer` 类包含一个 WebSocket 服务器和一个聊天室列表。它有一个构造函数,用于启动服务器并创建一个默认聊天室。它还有一个 `CreateRoom` 方法,用于创建新聊天室。
在构造函数中,我们首先创建一个默认聊天室,并将其添加到聊天室列表中。然后,我们将根路径 `/` 映射到默认聊天室,并为每个连接到服务器的用户分配一个 `Guest` 用户名。
在 `CreateRoom` 方法中,我们创建一个新的聊天室,并将其添加到聊天室列表中。然后,我们将新聊天室的路径映射到该聊天室,并为每个连接到该聊天室的用户分配一个 `Guest` 用户名。
现在,你可以使用以下代码来启动聊天服务器并创建多个聊天室:
```csharp
using System;
namespace WebSocketServer
{
class Program
{
static void Main(string[] args)
{
var server = new ChatServer("ws://localhost:8080");
server.CreateRoom("Sports");
server.CreateRoom("Music");
Console.ReadLine();
}
}
}
```
在上面的代码中,我们创建了一个 `ChatServer` 实例并启动了服务器。然后,我们创建了三个聊天室:`General`、`Sports` 和 `Music`。
现在,你可以使用 WebSocket 客户端连接到这些聊天室,并与其他用户聊天。
阅读全文