8个不稳定版本 (3个破坏性更新)
0.9.0 | 2024年7月24日 |
---|---|
0.8.0 | 2024年2月19日 |
0.7.2 | 2022年5月12日 |
0.7.1 | 2022年4月22日 |
0.6.2 | 2022年2月23日 |
#218 in 网络编程
每月下载量146次
用于bevy_eventwork_mod_websoc…
64KB
966 行
bevy_eventwork
是解决你在bevy游戏中“如何连接多个bevy实例”问题的方案,从优秀的bevy_spicy_networking
分支而来,进行了大量的模块化和重大更改,包括移除tokio和typetag等大型依赖。
内容
文档
您可以查看在线文档,或通过克隆此仓库并运行cargo doc -p bevy_eventwork
来自行构建。
有关示例,请参阅示例目录。
- 在
server.rs
中,您将找到一个简单的聊天服务器,它会广播从客户端接收到的消息。 - 在
client.rs
中,您将找到一个简单的图形聊天客户端,您可以连接到服务器并发送消息。
(注意:由于bevy不包含文本输入小部件,这只是一个非常简化的演示。一旦bevy的UI部分更加完善,这将很容易扩展。)
快速入门
- 将
bevy_eventwork
和serde
添加到您的Cargo.toml
文件中。 - 创建您希望在客户端和服务器之间交换的消息,或者反之。
- 在它上面实现 Serde 的 Serialize 和 Deserialize。
- 实现
NetworkMessage
。
#[derive(Serialize, Deserialize)]
struct WhisperMessage {
recipient: UserId,
message: String,
}
/// In this example, we'll be sending this from a client to a server,
/// BUT, any eventwork bevy instance could recieve the message as
/// long as they register to listen for it.
impl NetworkMessage for WhisperMessage {
const NAME: &'static str = "example:WhisperMessage";
}
- 在接收方,设置应用程序并注册要接收的类型。
use bevy_eventwork::{AppNetworkMessage, tcp::TcpProvider};
fn main() {
let mut app = App::new();
/// Add the EventworkPlugin specifying what Transport to use and what runtime
app.add_plugins(bevy_eventwork::EventworkPlugin::<
TcpProvider,
bevy::tasks::TaskPool,
>::default());
/// Insert your desired runtime pool into the app wrapped in EventworkRuntime
app.insert_resource(EventworkRuntime(
TaskPoolBuilder::new().num_threads(2).build(),
));
/// Register any messages to be heard
///
/// Now whenever a client sends a `WhisperMessage` the server will generate an event of
/// `NetworkData<WhisperMessage>` which your application can then handle
app.listen_for_message::<WhisperMessage, TcpProvider>();
}
- 监听该类型的事件。
fn handle_incoming_whisper_messages(
mut whisper_messages: EventReader<NetworkMessage<WhisperMessage>>,
) {
for whisper_message in whisper_messages.iter() {
// Handle the whisper
}
}
请求/响应
从版本 0.7.1 开始,现在可以使用事件工作自动处理请求/响应风格的消息!有关更多信息,请参阅文档!
Bevy版本兼容性
只需选择与您的 bevy 版本兼容的版本。
Bevy Eventwork | Bevy |
---|---|
0.9 | 0.14 |
0.8 | 0.13 |
0.7 | 0.8 |
与最新 bevy 版本不兼容的任何版本都处于维护模式。它将只接收我或社区提供的少量错误修复。
支持的平台
- Linux
- Windows
- WASM(使用与 Wasm 兼容的传输提供者,如 BEMW)
上述三个平台是官方支持的。 MacOS 应该可以工作,但我没有 Mac 进行测试。如果您有 Mac,并希望测试它并反馈,请告诉我!
路线图
- 一般代码清理、测试和文档工作
- 消息宽事件管道
- 用于将连接 ID 映射到用户提供的 ID 的非常有用。
- 消息类型映射
- 目前,每个方法发送的消息类型都是字符串,如果能只发送几个字节就更好了。
- RPCs!
使用bevy_eventwork
的包
目前没有,您可以通过发送 PR 并将其添加到下面的表格中来帮助扩展这个列表!
名称 | 版本 |
---|---|
- | - |
bevy_eventwork
的传输提供者
名称 | 版本 |
---|---|
eventwork_tcp(包含) | 0.9 |
bevy_eventwork_mod_websockets (链接) | 0.2 |
贡献
要贡献,只需分叉存储库并发送 PR。
如果您有任何问题、建议,或者我不够快地处理您的 PR 并且您需要有人(当然是有礼貌的)责备,请随时在我的 bevy discord 上与我联系 @SirCarter#8209
。
依赖项
~35–72MB
~1M SLoC