first implementation
This commit is contained in:
16
signaling/Cargo.toml
Normal file
16
signaling/Cargo.toml
Normal file
@ -0,0 +1,16 @@
|
||||
[package]
|
||||
name = "signaling"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
tonic = "0.11"
|
||||
prost = "0.12"
|
||||
serde = { version = "1" }
|
||||
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
|
||||
|
||||
[build-dependencies]
|
||||
tonic-build = "0.11"
|
||||
|
||||
[dev-dependencies]
|
||||
serde_json = "1"
|
21
signaling/build.rs
Normal file
21
signaling/build.rs
Normal file
@ -0,0 +1,21 @@
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
tonic_build::configure()
|
||||
.type_attribute(
|
||||
"Message",
|
||||
"#[derive(serde::Deserialize, serde::Serialize)]\n#[serde(tag = \"type\")]",
|
||||
)
|
||||
.type_attribute(
|
||||
"SignalingMessage",
|
||||
"#[derive(serde::Deserialize, serde::Serialize)]\n#[serde(default)]",
|
||||
)
|
||||
.type_attribute(
|
||||
"SDPMessage",
|
||||
"#[derive(serde::Deserialize, serde::Serialize)]",
|
||||
)
|
||||
.type_attribute(
|
||||
"ICECandidate",
|
||||
"#[derive(serde::Deserialize, serde::Serialize)]",
|
||||
)
|
||||
.compile(&["proto/signaling.proto"], &["proto"])?;
|
||||
Ok(())
|
||||
}
|
44
signaling/proto/signaling.proto
Normal file
44
signaling/proto/signaling.proto
Normal file
@ -0,0 +1,44 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package signaling;
|
||||
|
||||
option go_package = "git.jeffthecoder.xyz/public/chat-signaling-server/pkg/proto/signaling";
|
||||
|
||||
import "google/protobuf/empty.proto";
|
||||
|
||||
enum SDPMessageKind {
|
||||
Video = 0;
|
||||
Audio = 1;
|
||||
VideoAudio = 2;
|
||||
Data = 3;
|
||||
}
|
||||
|
||||
message SDPMessage {
|
||||
string SDP = 1;
|
||||
SDPMessageKind Kind = 2;
|
||||
string Sender = 3;
|
||||
}
|
||||
|
||||
message ICECandidate {
|
||||
string Candidate = 1;
|
||||
string Sender = 2;
|
||||
}
|
||||
|
||||
message SignalingMessage {
|
||||
string Room = 1;
|
||||
string Sender = 2;
|
||||
optional string Receiver = 3;
|
||||
oneof Message {
|
||||
google.protobuf.Empty Bootstrap = 10;
|
||||
google.protobuf.Empty DiscoverRequest = 11;
|
||||
google.protobuf.Empty DiscoverResponse = 12;
|
||||
|
||||
SDPMessage SessionOffer = 13;
|
||||
SDPMessage SessionAnswer = 14;
|
||||
ICECandidate ICECandidate = 15;
|
||||
};
|
||||
}
|
||||
|
||||
service Signaling {
|
||||
rpc Biu(stream SignalingMessage) returns (stream SignalingMessage);
|
||||
}
|
29
signaling/src/lib.rs
Normal file
29
signaling/src/lib.rs
Normal file
@ -0,0 +1,29 @@
|
||||
tonic::include_proto!("signaling"); // The string specified here must match the proto package name
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
#[test]
|
||||
fn serde_serialization() {
|
||||
println!(
|
||||
"{}",
|
||||
serde_json::to_string(&crate::SignalingMessage {
|
||||
message: Some(crate::signaling_message::Message::Bootstrap(())),
|
||||
..Default::default()
|
||||
})
|
||||
.unwrap()
|
||||
);
|
||||
|
||||
println!(
|
||||
"{}",
|
||||
serde_json::to_string(&crate::SignalingMessage {
|
||||
message: Some(crate::signaling_message::Message::SessionOffer(
|
||||
crate::SdpMessage {
|
||||
..Default::default()
|
||||
}
|
||||
)),
|
||||
..Default::default()
|
||||
})
|
||||
.unwrap()
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user