[edit] Hypothetical gRPC handshake
This commit is contained in:
parent
80282f6ba3
commit
f8eceb3124
4
.gitignore
vendored
4
.gitignore
vendored
@ -29,6 +29,10 @@
|
|||||||
# Executables
|
# Executables
|
||||||
*.o
|
*.o
|
||||||
|
|
||||||
|
# Protobuffer builds
|
||||||
|
*.pb.cc
|
||||||
|
*.pb.h
|
||||||
|
|
||||||
# Directories
|
# Directories
|
||||||
build/
|
build/
|
||||||
.vscode/
|
.vscode/
|
||||||
|
45
src/main.cpp
45
src/main.cpp
@ -1,37 +1,36 @@
|
|||||||
// $$$$$$\ $$\
|
// $$$$$$\ $$\
|
||||||
// $$ __$$\ $$ |
|
// $$ __$$\ $$ |
|
||||||
// $$ / \__|$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$\ $$$$$$$ |
|
// $$ / \__|$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$\ $$$$$$$ |
|
||||||
// $$$$\ $$ __$$\ $$ _____|$$ _____|$$ _____|$$ __$$\ $$ __$$\ $$ __$$ |
|
// $$$$\ $$ __$$\ $$ _____|$$ _____|$$ _____|$$ __$$\ $$ __$$\ $$ __$$ |
|
||||||
// $$ _| $$ / $$ |\$$$$$$\ \$$$$$$\ $$ / $$ / $$ |$$ | \__|$$ / $$ |
|
// $$ _| $$ / $$ |\$$$$$$\ \$$$$$$\ $$ / $$ / $$ |$$ | \__|$$ / $$ |
|
||||||
// $$ | $$ | $$ | \____$$\ \____$$\ $$ | $$ | $$ |$$ | $$ | $$ |
|
// $$ | $$ | $$ | \____$$\ \____$$\ $$ | $$ | $$ |$$ | $$ | $$ |
|
||||||
// $$ | \$$$$$$ |$$$$$$$ |$$$$$$$ |\$$$$$$$\ \$$$$$$ |$$ | \$$$$$$$ |
|
// $$ | \$$$$$$ |$$$$$$$ |$$$$$$$ |\$$$$$$$\ \$$$$$$ |$$ | \$$$$$$$ |
|
||||||
// \__| \______/ \_______/ \_______/ \_______| \______/ \__| \_______|
|
// \__| \______/ \_______/ \_______/ \_______| \______/ \__| \_______|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// $$\ $$$$$$\
|
// $$\ $$$$$$\
|
||||||
// \__| $$ __$$\
|
// \__| $$ __$$\
|
||||||
// $$\ $$\ $$$$$$\ $$\ $$$$$$$\ $$$$$$\ $$ / \__| $$$$$$\ $$$$$$\ $$\ $$\ $$$$$$\ $$$$$$\
|
// $$\ $$\ $$$$$$\ $$\ $$$$$$$\ $$$$$$\ $$ / \__| $$$$$$\ $$$$$$\ $$\ $$\ $$$$$$\ $$$$$$\
|
||||||
// \$$\ $$ |$$ __$$\ $$ |$$ _____|$$ __$$\ \$$$$$$\ $$ __$$\ $$ __$$\\$$\ $$ |$$ __$$\ $$ __$$\
|
// \$$\ $$ |$$ __$$\ $$ |$$ _____|$$ __$$\ \$$$$$$\ $$ __$$\ $$ __$$\\$$\ $$ |$$ __$$\ $$ __$$\
|
||||||
// \$$\$$ / $$ / $$ |$$ |$$ / $$$$$$$$ | \____$$\ $$$$$$$$ |$$ | \__|\$$\$$ / $$$$$$$$ |$$ | \__|
|
// \$$\$$ / $$ / $$ |$$ |$$ / $$$$$$$$ | \____$$\ $$$$$$$$ |$$ | \__|\$$\$$ / $$$$$$$$ |$$ | \__|
|
||||||
// \$$$ / $$ | $$ |$$ |$$ | $$ ____|$$\ $$ |$$ ____|$$ | \$$$ / $$ ____|$$ |
|
// \$$$ / $$ | $$ |$$ |$$ | $$ ____|$$\ $$ |$$ ____|$$ | \$$$ / $$ ____|$$ |
|
||||||
// \$ / \$$$$$$ |$$ |\$$$$$$$\ \$$$$$$$\ \$$$$$$ |\$$$$$$$\ $$ | \$ / \$$$$$$$\ $$ |
|
// \$ / \$$$$$$ |$$ |\$$$$$$$\ \$$$$$$$\ \$$$$$$ |\$$$$$$$\ $$ | \$ / \$$$$$$$\ $$ |
|
||||||
// \_/ \______/ \__| \_______| \_______| \______/ \_______|\__| \_/ \_______|\__|
|
// \_/ \______/ \__| \_______| \_______| \______/ \_______|\__| \_/ \_______|\__|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include "rtcPeerHandler.hpp" //Handle peer connection requests
|
||||||
|
#include "rpcStub.hpp" //Handle gRPC communications between the different fosscord elements
|
||||||
|
|
||||||
#include "rtcPeerHandler.hpp" //HAndle peer connection requests
|
int main(int argc, char **argv){
|
||||||
#include "rpcStub.hpp" //Handle gRPC communications between the different fosscord elements
|
|
||||||
|
|
||||||
int main (int argc, char** argv){
|
|
||||||
|
|
||||||
auto commsHandler = std::make_shared<rtcPeerHandler>();
|
auto commsHandler = std::make_shared<rtcPeerHandler>();
|
||||||
auto rpcHandler = std::unique_ptr<rpcStub>();
|
auto rpcHandler = std::unique_ptr<rpcStub>(new rpcStub(commsHandler, 8057));
|
||||||
|
|
||||||
std::cout << "Server created" <<std::endl;
|
std::cout << "Server created" << std::endl;
|
||||||
|
|
||||||
//rpcHandler->server->Wait(); //blocking, this will need to be threaded
|
//rpcHandler->server->Wait(); //blocking, this will need to be threaded
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -3,13 +3,13 @@ syntax = "proto3";
|
|||||||
package fosscordMedia;
|
package fosscordMedia;
|
||||||
|
|
||||||
service fosscordInternals{
|
service fosscordInternals{
|
||||||
rpc requestProtocol(voiceRequest) returns (voiceAnswer) {}
|
rpc vRequest(voiceRequest) returns (voiceAnswer) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
message voiceRequest{ //OP1 from gw
|
message voiceRequest{ //OP1 from gw
|
||||||
uint64 userid = 1;
|
uint64 userid = 1;
|
||||||
uint64 guildid = 2;
|
uint64 guildid = 2;
|
||||||
string IP=3;
|
string ip=3;
|
||||||
uint32 port=4;
|
uint32 port=4;
|
||||||
string protocol=5;
|
string protocol=5;
|
||||||
string rtcConnectionId=6;
|
string rtcConnectionId=6;
|
||||||
|
@ -1,24 +1,32 @@
|
|||||||
#include "rpcStub.hpp"
|
#include "rpcStub.hpp"
|
||||||
|
|
||||||
class fossCordInternalsImpl final : public fosscordMedia::fosscordInternals::Service{
|
class fossCordInternalsImpl final : public fosscordMedia::fosscordInternals::Service {
|
||||||
grpc::Status sendRequest(
|
std::shared_ptr<rtcPeerHandler> ph;
|
||||||
grpc::ServerContext* ctx,
|
fossCordInternalsImpl(std::shared_ptr<rtcPeerHandler> handler){
|
||||||
const fosscordMedia::rpcRequest* req,
|
this->ph= handler;
|
||||||
fosscordMedia::rpcResponse* resp
|
|
||||||
) override{
|
|
||||||
resp->set_b(333);
|
|
||||||
return grpc::Status::OK;
|
|
||||||
}
|
}
|
||||||
|
grpc::Status vRequest(grpc::ServerContext* ctx,
|
||||||
|
const fosscordMedia::voiceRequest* req,
|
||||||
|
fosscordMedia::voiceAnswer* resp) override {
|
||||||
|
|
||||||
|
this->ph->initiateConnection(req->ip(), req->port());
|
||||||
|
return grpc::Status::OK;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
rpcStub::rpcStub(int port){
|
rpcStub::rpcStub(std::shared_ptr<rtcPeerHandler> handler, int port) {
|
||||||
grpc::ServerBuilder builder;
|
if (not port) {
|
||||||
|
port = 8057;
|
||||||
|
}
|
||||||
|
this->ph = handler;
|
||||||
|
|
||||||
fossCordInternalsImpl* service;
|
fossCordInternalsImpl* service;
|
||||||
builder.AddListeningPort("0.0.0.0:8057", grpc::InsecureServerCredentials() );
|
grpc::ServerBuilder builder;
|
||||||
builder.RegisterService(service);
|
builder.AddListeningPort("0.0.0.0:" + std::to_string(port),
|
||||||
|
grpc::InsecureServerCredentials());
|
||||||
|
builder.RegisterService(service);
|
||||||
|
|
||||||
std::unique_ptr<grpc::Server> server(builder.BuildAndStart());
|
this->server = builder.BuildAndStart();
|
||||||
std::cout << "Server listening on port 8057 " << std::endl;
|
|
||||||
|
std::cout << "RPC stub listening on port " << port << std::endl;
|
||||||
}
|
}
|
@ -1,11 +1,12 @@
|
|||||||
#include <grpc++/grpc++.h>
|
#include <grpc++/grpc++.h>
|
||||||
#include "protodefs/include/protos.grpc.pb.h"
|
#include "protodefs/include/protos.grpc.pb.h"
|
||||||
|
#include "rtcPeerHandler.hpp"
|
||||||
|
|
||||||
class rpcStub{
|
class rpcStub{
|
||||||
public:
|
public:
|
||||||
rpcStub(int port);
|
rpcStub(std::shared_ptr<rtcPeerHandler> peerHandler, int port);
|
||||||
std::unique_ptr<grpc::Server> server;
|
std::unique_ptr<grpc::Server> server;
|
||||||
private:
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::shared_ptr<rtcPeerHandler> ph;
|
||||||
};
|
};
|
@ -1,45 +1,44 @@
|
|||||||
#include "rtcPeerHandler.hpp"
|
#include "rtcPeerHandler.hpp"
|
||||||
rtcPeerHandler::rtcPeerHandler()
|
|
||||||
{
|
rtcPeerHandler::rtcPeerHandler() {
|
||||||
rtc::InitLogger(rtc::LogLevel::Verbose, NULL);
|
rtc::InitLogger(rtc::LogLevel::Verbose, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtcPeerHandler::initiateConnection(std::string peerIP, int peerPort)
|
void rtcPeerHandler::initiateConnection(std::string peerIP, int peerPort) {
|
||||||
{
|
// Socket connection between client and server
|
||||||
//Socket connection between client and server
|
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
|
sockaddr_in addr;
|
||||||
sockaddr_in addr;
|
addr.sin_addr.s_addr = inet_addr(peerIP.c_str());
|
||||||
addr.sin_addr.s_addr = inet_addr(peerIP.c_str());
|
addr.sin_port = htons(peerPort);
|
||||||
addr.sin_port = htons(peerPort);
|
addr.sin_family = AF_INET;
|
||||||
addr.sin_family = AF_INET;
|
|
||||||
|
|
||||||
rtc::Configuration conf;
|
rtc::Configuration conf;
|
||||||
conf.enableIceTcp = false;
|
conf.enableIceTcp = false;
|
||||||
conf.disableAutoNegotiation = false;
|
conf.disableAutoNegotiation = false;
|
||||||
|
|
||||||
auto pc = std::make_shared<rtc::PeerConnection>(conf);
|
auto pc = std::make_shared<rtc::PeerConnection>(conf);
|
||||||
|
|
||||||
rtc::Description::Audio media("audio", rtc::Description::Direction::SendRecv);
|
rtc::Description::Audio media("audio",
|
||||||
media.addOpusCodec(96);
|
rtc::Description::Direction::SendRecv);
|
||||||
media.setBitrate(64);
|
media.addOpusCodec(96);
|
||||||
|
media.setBitrate(64);
|
||||||
|
|
||||||
|
auto track = pc->addTrack(media);
|
||||||
|
|
||||||
auto track = pc->addTrack(media);
|
// auto session = std::make_shared<rtc::MediaHandler>();
|
||||||
|
|
||||||
//auto session = std::make_shared<rtc::MediaHandler>();
|
// track->setMediaHandler(session);
|
||||||
|
|
||||||
//track->setMediaHandler(session);
|
rtc::Reliability rtcRel;
|
||||||
|
rtcRel.unordered = true;
|
||||||
|
rtcRel.type = rtc::Reliability::Type::Timed;
|
||||||
|
rtcRel.rexmit = 500;
|
||||||
|
|
||||||
rtc::Reliability rtcRel;
|
rtc::DataChannelInit rtcConf;
|
||||||
rtcRel.unordered = true;
|
rtcConf.reliability = rtcRel;
|
||||||
rtcRel.type = rtc::Reliability::Type::Timed;
|
rtcConf.negotiated = false;
|
||||||
rtcRel.rexmit = 500;
|
|
||||||
|
|
||||||
rtc::DataChannelInit rtcConf;
|
pc->onStateChange([](rtc::PeerConnection::State state) {
|
||||||
rtcConf.reliability = rtcRel;
|
|
||||||
rtcConf.negotiated = false;
|
|
||||||
|
|
||||||
pc->onStateChange([](rtc::PeerConnection::State state) {
|
|
||||||
std::cout << "State: " << state << std::endl;
|
std::cout << "State: " << state << std::endl;
|
||||||
if (state == rtc::PeerConnection::State::Disconnected ||
|
if (state == rtc::PeerConnection::State::Disconnected ||
|
||||||
state == rtc::PeerConnection::State::Failed ||
|
state == rtc::PeerConnection::State::Failed ||
|
||||||
@ -48,10 +47,37 @@ void rtcPeerHandler::initiateConnection(std::string peerIP, int peerPort)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
pc->onGatheringStateChange(
|
pc->onGatheringStateChange([](rtc::PeerConnection::GatheringState state) {
|
||||||
[](rtc::PeerConnection::GatheringState state) { std::cout << "Gathering State: " << state << std::endl; });
|
std::cout << "Gathering State: " << state << std::endl;
|
||||||
|
});
|
||||||
|
|
||||||
|
/*std::tuple<rtc::Track*, rtc::RtcpSrReporter*> addAudio(
|
||||||
|
|
||||||
|
const std::shared_ptr<rtc::PeerConnection> pc,
|
||||||
|
const uint8_t payloadType, const uint32_t ssrc, const std::string cname,
|
||||||
|
const std::string msid, const std::function<void(void)> onOpen) {
|
||||||
|
auto audio = Description::Audio(cname);
|
||||||
|
audio.addOpusCodec(payloadType);
|
||||||
|
audio.addSSRC(ssrc, cname, msid, cname);
|
||||||
|
auto track = pc->addTrack(audio);
|
||||||
|
// create RTP configuration
|
||||||
|
auto rtpConfig = make_shared<RtpPacketizationConfig>(
|
||||||
|
ssrc, cname, payloadType, OpusRtpPacketizer::defaultClockRate);
|
||||||
|
// create packetizer
|
||||||
|
auto packetizer = make_shared<OpusRtpPacketizer>(rtpConfig);
|
||||||
|
// create opus handler
|
||||||
|
auto opusHandler = make_shared<OpusPacketizationHandler>(packetizer);
|
||||||
|
|
||||||
pc->createDataChannel("Fosscord voice connection", rtcConf);
|
// add RTCP SR handler
|
||||||
|
auto srReporter = make_shared<RtcpSrReporter>(rtpConfig);
|
||||||
|
opusHandler->addToChain(srReporter);
|
||||||
|
|
||||||
|
// set handler
|
||||||
|
track->setMediaHandler(opusHandler);
|
||||||
|
track->onOpen(onOpen);
|
||||||
|
auto trackData = make_shared<ClientTrackData>(track, srReporter);
|
||||||
|
return trackData;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
pc->createDataChannel("Fosscord voice connection", rtcConf);
|
||||||
}
|
}
|
||||||
|
|
@ -13,6 +13,8 @@ typedef int SOCKET;
|
|||||||
|
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
#ifndef RTCPEERHANDLER
|
||||||
|
#define RTCPEERHANDLER
|
||||||
class rtcPeerHandler{
|
class rtcPeerHandler{
|
||||||
public:
|
public:
|
||||||
rtcPeerHandler();
|
rtcPeerHandler();
|
||||||
@ -26,4 +28,5 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<SOCKET, client> clients;
|
std::map<SOCKET, client> clients;
|
||||||
};
|
};
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user