diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e6f4349 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "backend-protobuf"] + path = backend-protobuf + url = git@makerforce.io:beep/backend-protobuf.git diff --git a/backend-protobuf b/backend-protobuf new file mode 160000 index 0000000..a36ddf9 --- /dev/null +++ b/backend-protobuf @@ -0,0 +1 @@ +Subproject commit a36ddf9a8106e69a2ad1c4a42fc78ed8765fd23e diff --git a/go.mod b/go.mod index 48caf38..3b2a0aa 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,12 @@ module webrtc go 1.12 require ( + github.com/golang/protobuf v1.3.1 github.com/gorilla/websocket v1.4.0 github.com/joho/godotenv v1.3.0 github.com/julienschmidt/httprouter v1.2.0 + github.com/nats-io/go-nats v1.7.2 + github.com/nats-io/nkeys v0.0.2 // indirect + github.com/nats-io/nuid v1.0.1 // indirect github.com/pion/webrtc/v2 v2.0.23 ) diff --git a/go.sum b/go.sum index 39ec04d..61c322c 100644 --- a/go.sum +++ b/go.sum @@ -3,7 +3,10 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gortc/turn v0.7.1/go.mod h1:3FZ+LvCZKCKu6YYgwuYPqEi3FqCtdjfSFnFqVQNwfjk= @@ -16,6 +19,12 @@ github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/lucas-clemente/quic-go v0.7.1-0.20190401152353-907071221cf9/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= +github.com/nats-io/go-nats v1.7.2 h1:cJujlwCYR8iMz5ofZSD/p2WLW8FabhkQ2lIEVbSvNSA= +github.com/nats-io/go-nats v1.7.2/go.mod h1:+t7RHT5ApZebkrQdnn6AhQJmhJJiKAvJUio1PiiCtj0= +github.com/nats-io/nkeys v0.0.2 h1:+qM7QpgXnvDDixitZtQUBDY9w/s9mu1ghS+JIbsrx6M= +github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -58,6 +67,7 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5 h1:bselrhR0Or1vomJZC8ZIjWtbDmn9OYFLX5Ik9alpJpE= diff --git a/main.go b/main.go index 2f9a6ac..b1d0326 100644 --- a/main.go +++ b/main.go @@ -9,17 +9,24 @@ import ( "net/http" "os" "strings" + "time" + + . "webrtc/backend-protobuf/go" "github.com/joho/godotenv" "github.com/julienschmidt/httprouter" "github.com/pion/webrtc/v2" "github.com/gorilla/websocket" + "github.com/golang/protobuf/proto" + "github.com/nats-io/go-nats" ) // Peer config var peerConnectionConfig webrtc.Configuration var listen string +var natsHost string + var upgrader websocket.Upgrader var mediaEngine webrtc.MediaEngine var webrtcApi *webrtc.API @@ -28,6 +35,8 @@ var userTracks map[string] map[string] *webrtc.Track // userid + clientid var conversationUsers map[string] []string var userConversation map[string] string +var natsConn *nats.Conn + func main() { // Load .env err := godotenv.Load() @@ -35,6 +44,7 @@ func main() { log.Fatal("Error loading .env file") } listen = os.Getenv("LISTEN") + natsHost = os.Getenv("NATS") upgrader = websocket.Upgrader{} @@ -63,6 +73,14 @@ func main() { conversationUsers = make(map[string] []string) userConversation = make(map[string] string) + // NATs client + natsConn, err := nats.Connect(natsHost) + if err != nil { + log.Println(err) + return + } + defer natsConn.Close() + // Routes router := httprouter.New() router.GET("/connect", GetAuth(NewConnection)) @@ -157,6 +175,31 @@ func NewConnection(w http.ResponseWriter, r *http.Request, p httprouter.Params) } } } + + start := time.Now().Unix() + bite := Bite { + Start: uint64(start), + Key: conversationId, + Data: rtpBuf[:i], + } + biteOut, err := proto.Marshal(&bite) + if err != nil { + log.Printf("%s", err) + } else { + natsConn.Publish("bite", biteOut) + } + + store := Store { + Type: "bite", + Bite: &bite, + } + + storeOut, err := proto.Marshal(&store) + if err != nil { + log.Printf("%s", err) + } else { + natsConn.Publish("store", storeOut) + } } } })