3个版本 (破坏性更新)
0.3.0 | 2024年7月20日 |
---|---|
0.2.0 | 2024年7月10日 |
0.1.0 | 2024年7月8日 |
409 在 游戏开发
每月168次下载
用于 bevy_octopus_websocket
52KB
1K SLoC
bevy_octopus
Bevy的低级别ECS驱动的网络插件。
使用方法
在Cargo.toml中添加以下内容
[dependencies]
bevy_octopus = { version = "0.3", "features" = ["serde_json", "bincode"]} # or your custom format
示例
use bevy::prelude::*;
use bevy_octopus::{
prelude::*,
transports::{tcp::TcpAddress, udp::UdpAddress},
};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct PlayerInformation {
pub health: usize,
pub position: (u32, u32, u32),
}
const TCP_CHANNEL: ChannelId = ChannelId("tcp");
const UDP_CHANNEL: ChannelId = ChannelId("udp");
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(OctopusPlugin)
// UDP CHANNEL use json tranformer for PlayerInformation struct
.add_transformer::<PlayerInformation, JsonTransformer>(UDP_CHANNEL)
// TCP_CHANNEL use json tranformer for PlayerInformation struct
.add_transformer::<PlayerInformation, BincodeTransformer>(TCP_CHANNEL)
.add_systems(Startup, setup)
.add_systems(Update, resend_udp_to_tcp)
.observe(on_node_event)
.run();
}
fn setup(mut commands: Commands) {
// tcp client
commands.spawn((
NetworkBundle::new(TCP_CHANNEL),
ClientNode(TcpAddress::new("127.0.0.1:4321")),
));
// udp server
commands.spawn((
NetworkBundle::new(UDP_CHANNEL),
ServerNode(UdpAddress::new("127.0.0.1:4002")),
));
}
pub fn on_node_event(trigger: Trigger<NetworkEvent>) {
info!("{:?} trigger {:?}", trigger.entity(), trigger.event());
}
pub fn resend_udp_to_tcp(
mut channel_recviced: EventReader<ReceiveChannelMessage<PlayerInformation>>,
mut ev_send: EventWriter<SendChannelMessage<PlayerInformation>>,
) {
for event in channel_recviced.read() {
info!("recevice {:?}", event.message);
if event.channel_id == UDP_CHANNEL {
ev_send.send(SendChannelMessage {
channel_id: TCP_CHANNEL,
message: event.message.clone(),
});
}
}
}
功能
ECS驱动的网络
每个网络节点都是一个组件,因此您可以轻松地使用Bevy ECS管理网络实体。
应用程序可以同时运行多个服务器和多个客户端。
灵活的网络协议解码器
您可以定义用于数据序列化和反序列化的通道转换器。
UDP通信类型
无tokio运行时
支持的网络协议
协议 | 服务器 | 客户端 | 带有SSL的服务器 | 带有SSL的客户端 |
---|---|---|---|---|
UDP | ✅ | ✅ | ✘ | ✘ |
TCP | ✅ | ✅ | ☐ | ☐ |
WebSocket | ✅ | ✅ | ☐ | ☐ |
网络组件
ServerNode | ClientNode | NetworkPeer | |
---|---|---|---|
服务器 | ✓ | ||
客户端 | ✓ | ||
客户端会话 | ✓ | ✓ |
支持的版本
bevy | bevy_octopus |
---|---|
0.14 | 0.2 |
0.13 | 0.1 |
许可证
此仓库中的所有代码均根据您选择的双授权
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache许可证第2版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
这意味着您可以选择您喜欢的许可证。
您的贡献
除非您明确表示,否则根据Apache-2.0许可证定义的,任何有意提交以包含在本作品中的贡献,都将根据上述方式进行双授权,无需任何额外的条款或条件。
依赖项
~24–65MB
~1M SLoC