Skip to content

Commit

Permalink
Merge pull request #8 from guilherme-marcello/jgc/organize-requests-p…
Browse files Browse the repository at this point in the history
…ackage

Organize requests package
  • Loading branch information
guilherme-marcello committed Mar 26, 2023
2 parents 75d5a10 + 9c1801a commit a0f0ec8
Show file tree
Hide file tree
Showing 8 changed files with 159 additions and 116 deletions.
22 changes: 15 additions & 7 deletions plugin/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,32 @@ type Plugin struct {
endpoint string
}

func newPluginHandler(session session.Session, name string) Plugin {
func newPluginHandler(session session.Session, name string) (Plugin, error) {
plugin := Plugin{
session: session,
name: name,
}
plugin.id = plugin.getId()
var err error
plugin.id, err = plugin.getId()
if err != nil {
return plugin, err
}

plugin.endpoint = plugin.getEndpoint()
return plugin
return plugin, nil
}

func (_plugin Plugin) getId() string {
response := requests.GetPostResponse(_plugin.session.Endpoint, requests.ATTACH_PLUGIN(_plugin.name))
func (_plugin Plugin) getId() (string, error) {
response, err := requests.SendHTTPRequest("POST", _plugin.session.Endpoint, requests.ATTACH_PLUGIN(_plugin.name))
if err != nil {
return "", err
}
model := &requests.MODEL_ATTACH_PLUGIN{}
err := json.NewDecoder(response.Body).Decode(&model)
err = json.NewDecoder(response.Body).Decode(&model)
if err != nil || model.Janus == "error" {
log.Printf("Failed to attach plugin %s at %s", _plugin.name, _plugin.session.Endpoint)
}
return strconv.FormatInt(model.Data.ID, 10)
return strconv.FormatInt(model.Data.ID, 10), nil
}

func (_plugin Plugin) getEndpoint() string {
Expand Down
19 changes: 12 additions & 7 deletions plugin/recordnplay.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,23 @@ type RecordPlay struct {
Plugin
}

func NewRecordPlayHandler(session session.Session) RecordPlay {
return RecordPlay{
newPluginHandler(session, "janus.plugin.recordplay"),
func NewRecordPlayHandler(session session.Session) (RecordPlay, error) {
plugin, err := newPluginHandler(session, "janus.plugin.recordplay")
if err != nil {
return RecordPlay{}, err
}
return RecordPlay{plugin}, nil
}

func (_recordplay RecordPlay) List() []elements.Recording {
response := requests.GetPostResponse(_recordplay.endpoint, requests.LIST_REQUEST())
func (_recordplay RecordPlay) List() ([]elements.Recording, error) {
response, err := requests.SendHTTPRequest("POST", _recordplay.endpoint, requests.LIST_REQUEST())
if err != nil {
return nil, err
}
model := &requests.MODEL_LIST_RECORDPLAY{}
err := json.NewDecoder(response.Body).Decode(&model)
err = json.NewDecoder(response.Body).Decode(&model)
if err != nil || model.Janus == "error" {
log.Printf("Failed list recordings with plugin %s at %s", _recordplay.name, _recordplay.session.Endpoint)
}
return model.Plugindata.Data.List
return model.Plugindata.Data.List, nil
}
19 changes: 12 additions & 7 deletions plugin/streaming.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,23 @@ type Streaming struct {
Plugin
}

func NewStreamingHandler(session session.Session) Streaming {
return Streaming{
newPluginHandler(session, "janus.plugin.streaming"),
func NewStreamingHandler(session session.Session) (Streaming, error) {
plugin, err := newPluginHandler(session, "janus.plugin.streaming")
if err != nil {
return Streaming{}, err
}
return Streaming{plugin}, nil
}

func (_streaming Streaming) List() []elements.Mountpoint {
response := requests.GetPostResponse(_streaming.endpoint, requests.LIST_REQUEST())
func (_streaming Streaming) List() ([]elements.Mountpoint, error) {
response, err := requests.SendHTTPRequest("POST", _streaming.endpoint, requests.LIST_REQUEST())
if err != nil {
return nil, err
}
model := &requests.MODEL_LIST_STREAMING{}
err := json.NewDecoder(response.Body).Decode(&model)
err = json.NewDecoder(response.Body).Decode(&model)
if err != nil || model.Janus == "error" {
log.Printf("Failed to list mountpoints with plugin %s at %s", _streaming.name, _streaming.session.Endpoint)
}
return model.Plugindata.Data.List
return model.Plugindata.Data.List, nil
}
19 changes: 19 additions & 0 deletions requests/plugin_recordnplay.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package requests

import (
"github.com/guilherme-marcello/janus/elements"
)

type MODEL_LIST_RECORDPLAY struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
Sender int64 `json:"sender"`
Plugindata struct {
Plugin string `json:"plugin"`
Data struct {
Recordplay string `json:"recordplay"`
List []elements.Recording `json:"list"`
} `json:"data"`
} `json:"plugindata"`
}
19 changes: 19 additions & 0 deletions requests/plugin_streaming.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package requests

import (
"github.com/guilherme-marcello/janus/elements"
)

type MODEL_LIST_STREAMING struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
Sender int64 `json:"sender"`
Plugindata struct {
Plugin string `json:"plugin"`
Data struct {
Streaming string `json:"streaming"`
List []elements.Mountpoint `json:"list"`
} `json:"data"`
} `json:"plugindata"`
}
103 changes: 14 additions & 89 deletions requests/requests.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,95 +3,11 @@ package requests
import (
"bytes"
"encoding/json"
"log"
"net/http"

"github.com/google/uuid"
"github.com/guilherme-marcello/janus/elements"
)

type MODEL_CREATE_SESSION struct {
Janus string `json:"janus"`
Transaction string `json:"transaction"`
Data struct {
ID int64 `json:"id"`
} `json:"data"`
}

func CREATE_SESSION() map[string]string {
return map[string]string{
"janus": "create", "transaction": uuid.New().String(),
}
}

type MODEL_DESTROY_SESSION struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
}

func DESTROY_SESSION() map[string]string {
return map[string]string{
"janus": "destroy", "transaction": uuid.New().String(),
}
}

type MODEL_KEEPALIVE_SESSION struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
}

func KEEPALIVE_SESSION() map[string]string {
return map[string]string{
"janus": "keepalive", "transaction": uuid.New().String(),
}
}

type MODEL_ATTACH_PLUGIN struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
Data struct {
ID int64 `json:"id"`
} `json:"data"`
}

func ATTACH_PLUGIN(pluginName string) map[string]string {
return map[string]string{
"janus": "attach", "transaction": uuid.New().String(),
"plugin": pluginName,
}
}

type MODEL_LIST_RECORDPLAY struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
Sender int64 `json:"sender"`
Plugindata struct {
Plugin string `json:"plugin"`
Data struct {
Recordplay string `json:"recordplay"`
List []elements.Recording `json:"list"`
} `json:"data"`
} `json:"plugindata"`
}

type MODEL_LIST_STREAMING struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
Sender int64 `json:"sender"`
Plugindata struct {
Plugin string `json:"plugin"`
Data struct {
Streaming string `json:"streaming"`
List []elements.Mountpoint `json:"list"`
} `json:"data"`
} `json:"plugindata"`
}

func LIST_REQUEST() map[string]any {
return map[string]any{
"janus": "message", "transaction": uuid.New().String(),
Expand All @@ -101,14 +17,23 @@ func LIST_REQUEST() map[string]any {
}
}

func GetPostResponse(endpoint string, payload any) *http.Response {
func SendHTTPRequest(method string, endpoint string, payload interface{}) (*http.Response, error) {
json_data, err := json.Marshal(payload)
if err != nil {
log.Fatal(err)
return nil, err
}
resp, err := http.Post(endpoint, "application/json", bytes.NewBuffer(json_data))

req, err := http.NewRequest(method, endpoint, bytes.NewBuffer(json_data))
if err != nil {
log.Fatal(err)
return nil, err
}
return resp
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}

return resp, nil
}
59 changes: 59 additions & 0 deletions requests/session.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package requests

import (
"github.com/google/uuid"
)

type MODEL_CREATE_SESSION struct {
Janus string `json:"janus"`
Transaction string `json:"transaction"`
Data struct {
ID int64 `json:"id"`
} `json:"data"`
}

func CREATE_SESSION() map[string]string {
return map[string]string{
"janus": "create", "transaction": uuid.New().String(),
}
}

type MODEL_DESTROY_SESSION struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
}

func DESTROY_SESSION() map[string]string {
return map[string]string{
"janus": "destroy", "transaction": uuid.New().String(),
}
}

type MODEL_KEEPALIVE_SESSION struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
}

func KEEPALIVE_SESSION() map[string]string {
return map[string]string{
"janus": "keepalive", "transaction": uuid.New().String(),
}
}

type MODEL_ATTACH_PLUGIN struct {
Janus string `json:"janus"`
SessionID int64 `json:"session_id"`
Transaction string `json:"transaction"`
Data struct {
ID int64 `json:"id"`
} `json:"data"`
}

func ATTACH_PLUGIN(pluginName string) map[string]string {
return map[string]string{
"janus": "attach", "transaction": uuid.New().String(),
"plugin": pluginName,
}
}
15 changes: 9 additions & 6 deletions session/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,25 @@ func New(client janus.Http) Session {
return session
}

func (_session Session) getId() string {
response := requests.GetPostResponse(_session.client.Endpoint, requests.CREATE_SESSION())
func (_session Session) getId() (string, error) {
response, err := requests.SendHTTPRequest("POST", _session.client.Endpoint, requests.CREATE_SESSION())
if err != nil {
return "", err
}
model := &requests.MODEL_CREATE_SESSION{}
err := json.NewDecoder(response.Body).Decode(&model)
err = json.NewDecoder(response.Body).Decode(&model)
if err != nil {
log.Fatalf("Failed to establish a new session at %s", _session.client.Endpoint)
}
return strconv.FormatInt(model.Data.ID, 10)
return strconv.FormatInt(model.Data.ID, 10), nil
}

func (_session Session) getEndpoint() string {
return _session.client.Endpoint + "/" + _session.id
}

func (_session Session) Destroy() {
response := requests.GetPostResponse(_session.Endpoint, requests.DESTROY_SESSION())
response, _ := requests.SendHTTPRequest("POST", _session.Endpoint, requests.DESTROY_SESSION())
model := &requests.MODEL_DESTROY_SESSION{}
err := json.NewDecoder(response.Body).Decode(&model)
if err != nil || model.Janus == "error" {
Expand All @@ -49,7 +52,7 @@ func (_session Session) Destroy() {
}

func (_session Session) KeepAlive() {
response := requests.GetPostResponse(_session.Endpoint, requests.KEEPALIVE_SESSION())
response, _ := requests.SendHTTPRequest("POST", _session.Endpoint, requests.KEEPALIVE_SESSION())
model := &requests.MODEL_KEEPALIVE_SESSION{}
err := json.NewDecoder(response.Body).Decode(&model)
if err != nil || model.Janus != "ack" {
Expand Down

0 comments on commit a0f0ec8

Please sign in to comment.