72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package ws
|
|
|
|
//todo better data deserialization
|
|
|
|
type IdentityData struct {
|
|
ClientID string `json:"clientID"`
|
|
User User `json:"user"`
|
|
}
|
|
|
|
func handleIdentifyEvent(message *Message) {
|
|
d := message.Data.(map[string]interface{})
|
|
if id, ok := d["clientID"]; ok {
|
|
log.Infof("Client %s has sent identify event", id.(string))
|
|
}
|
|
user := d["user"].(map[string]interface{})
|
|
userId := user["id"].(string)
|
|
playhead := message.hub.State.playhead
|
|
|
|
m := Message{
|
|
MessageData: MessageData{
|
|
Type: Identify,
|
|
Data: map[string]interface{}{
|
|
"admin": message.hub.State.IsAdmin(userId),
|
|
"playlist": "http://localhost:8081/BelleOpening.m3u8",
|
|
"hasController": message.hub.State.IsController(userId),
|
|
"playhead": playhead,
|
|
"user": d["user"],
|
|
},
|
|
},
|
|
}
|
|
message.send <- m.SerializeMessage().Data
|
|
}
|
|
|
|
func handlePingEvent(message *Message) {
|
|
m := Message{
|
|
message.Client,
|
|
MessageData{
|
|
Type: Pong,
|
|
Data: nil,
|
|
},
|
|
}
|
|
message.send <- m.SerializeMessage().Data
|
|
}
|
|
|
|
func handleGetPlayhead(message *Message) {
|
|
|
|
}
|
|
|
|
func handleSetPlayhead(message *Message) {
|
|
d := message.Data.(map[string]interface{})
|
|
m := Message{
|
|
MessageData: MessageData{
|
|
Type: SetPlayhead,
|
|
Data: map[string]interface{}{
|
|
"playhead": d["playhead"],
|
|
"paused": d["paused"],
|
|
},
|
|
},
|
|
}
|
|
log.Infof("Received SetPlayhead event. playhead is at %s", d["playhead"])
|
|
err := message.hub.State.setPlayhead(d["playhead"].(float64))
|
|
if err != nil {
|
|
log.Errorf("unable to set playhead. %s", err)
|
|
}
|
|
for client := range message.Client.hub.Clients {
|
|
if client == message.Client {
|
|
continue
|
|
}
|
|
client.send <- m.SerializeMessage().Data
|
|
}
|
|
}
|