CHG: refactor
CHG: use concurrent map instead of regular map with lock DEL: global session control, moved to per server only DEL: unused command system
This commit is contained in:
parent
570f501a76
commit
9edcb83fc4
12 changed files with 216 additions and 335 deletions
|
@ -10,10 +10,11 @@ import (
|
|||
|
||||
func Load(namespace socketio.Namespace, debug bool) {
|
||||
namespace.OnEvent("data", func(so socketio.Socket, msg string) {
|
||||
clientType := so.GetQuery().Get("type") == "server"
|
||||
isServer := so.GetQuery().Get("type") == "server"
|
||||
var ok bool
|
||||
var server *objects.Server
|
||||
if !clientType {
|
||||
var err error
|
||||
if !isServer {
|
||||
ok, server = data.HasServer(so.GetQuery().Get("control_id"))
|
||||
if !ok {
|
||||
if debug {
|
||||
|
@ -27,28 +28,39 @@ func Load(namespace socketio.Namespace, debug bool) {
|
|||
return
|
||||
}
|
||||
|
||||
_ = server.Socket.Emit("data", msg)
|
||||
err = server.Socket.Emit("data", msg)
|
||||
if err != nil && debug {
|
||||
log.Println("error while sending data to server:", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
ok, server = data.HasServer(so.GetQuery().Get("id"))
|
||||
if !strings.HasPrefix(msg, "{") {
|
||||
args := strings.SplitN(msg, "@", 2)
|
||||
ok, session := server.HasSession(args[0])
|
||||
if !ok {
|
||||
if debug {
|
||||
log.Println(
|
||||
"Unable to send packet from server:",
|
||||
server.ID,
|
||||
"to client:",
|
||||
args[0],
|
||||
)
|
||||
}
|
||||
return
|
||||
if msg[0] == '{' {
|
||||
err = server.Socket.EmitError("messages can only be send to clients")
|
||||
if err != nil && debug {
|
||||
log.Println("error while sending data to server:", err)
|
||||
}
|
||||
|
||||
_ = session.Emit("data", args[1])
|
||||
return
|
||||
}
|
||||
|
||||
args := strings.SplitN(msg, "@", 2)
|
||||
ok, session := server.HasSession(args[0])
|
||||
if !ok {
|
||||
if debug {
|
||||
log.Println(
|
||||
"Unable to send packet from server:",
|
||||
server.ID,
|
||||
"to client:",
|
||||
args[0],
|
||||
)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
err = session.Emit("data", args[1])
|
||||
if err != nil && debug {
|
||||
log.Println("error while sending data to server:", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
80
handlers/user/client.go
Normal file
80
handlers/user/client.go
Normal file
|
@ -0,0 +1,80 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"github.com/Mindgamesnl/socketio"
|
||||
"github.com/ParadoxPixel/ThemePark-Websocket/data"
|
||||
"log"
|
||||
)
|
||||
|
||||
func clientLogin(so socketio.Socket) {
|
||||
ok, server := data.HasServer(so.GetQuery().Get("control_id"))
|
||||
if !ok {
|
||||
if debug {
|
||||
log.Println(
|
||||
"No server with id:",
|
||||
so.GetQuery().Get("control_id"),
|
||||
"for token:",
|
||||
so.GetQuery().Get("token"),
|
||||
)
|
||||
}
|
||||
_ = so.Emit("close", "SERVER_ERROR")
|
||||
_ = so.Close()
|
||||
return
|
||||
}
|
||||
|
||||
b := server.AddSession(so.GetQuery().Get("token"), so.GetQuery().Get("attraction"), so)
|
||||
if !b {
|
||||
if debug {
|
||||
log.Println(
|
||||
"Server with id:",
|
||||
so.GetQuery().Get("control_id"),
|
||||
"already has operator for attraction:",
|
||||
so.GetQuery().Get("attraction"),
|
||||
)
|
||||
}
|
||||
_ = so.Emit("close", "AUTHENTICATION_ERROR")
|
||||
_ = so.Close()
|
||||
return
|
||||
}
|
||||
|
||||
if debug {
|
||||
log.Println(
|
||||
"Client connected to id:",
|
||||
so.GetQuery().Get("control_id"),
|
||||
"with token:",
|
||||
so.GetQuery().Get("token"),
|
||||
"to attraction:",
|
||||
so.GetQuery().Get("attraction"),
|
||||
)
|
||||
}
|
||||
|
||||
err := server.Socket.Emit("data", "{\"channel\":\"SERVER_IN_REGISTER_CLIENT\",\"data\":{\"payload\":{\"uuid\":\""+so.GetQuery().Get("uuid")+"\",\"token\":\""+so.GetQuery().Get("token")+"\",\"attraction_id\":\""+so.GetQuery().Get("attraction")+"\"},\"type\":\"ClientConnectPayload\"}}")
|
||||
if err != nil && debug {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
func clientQuit(so socketio.Socket) {
|
||||
session := so.GetQuery().Get("token")
|
||||
ok, server := data.HasServer(so.GetQuery().Get("control_id"))
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
if debug {
|
||||
log.Println(
|
||||
"Client disconnected to id:",
|
||||
so.GetQuery().Get("control_id"),
|
||||
"with token:",
|
||||
so.GetQuery().Get("token"),
|
||||
"to attraction:",
|
||||
so.GetQuery().Get("attraction"),
|
||||
)
|
||||
}
|
||||
|
||||
server.RemoveSession(session, so.GetQuery().Get("attraction"))
|
||||
err := server.Socket.Emit("data", "{\"channel\":\"SERVER_IN_UNREGISTER_CLIENT\",\"data\":{\"payload\":{\"uuid\":\""+so.GetQuery().Get("uuid")+"\"},\"type\":\"ClientDisconnectPayload\"}}")
|
||||
if err != nil && debug {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
|
@ -3,8 +3,6 @@ package user
|
|||
import (
|
||||
"fmt"
|
||||
"github.com/Mindgamesnl/socketio"
|
||||
"github.com/ParadoxPixel/ThemePark-Websocket/data"
|
||||
"github.com/ParadoxPixel/ThemePark-Websocket/objects"
|
||||
"log"
|
||||
)
|
||||
|
||||
|
@ -22,57 +20,18 @@ func Load(namespace socketio.Namespace, b bool) {
|
|||
return
|
||||
} else {
|
||||
_ = so.Close()
|
||||
if debug {
|
||||
log.Println("invalid client type:", clientType)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
namespace.OnDisconnect(func(so socketio.Socket) {
|
||||
clientType := so.GetQuery().Get("type")
|
||||
var session string
|
||||
if clientType == "server" {
|
||||
session = so.GetQuery().Get("id")
|
||||
obj := data.GetServer(session)
|
||||
if obj == nil {
|
||||
return
|
||||
}
|
||||
|
||||
data.RemoveServer(session)
|
||||
if debug {
|
||||
log.Println(
|
||||
"Server with id:",
|
||||
so.GetQuery().Get("id"),
|
||||
"disconnected",
|
||||
)
|
||||
}
|
||||
for _, user := range obj.Sessions {
|
||||
_ = user.Emit("close", "SERVER_ERROR")
|
||||
_ = user.Close()
|
||||
}
|
||||
serverQuit(so)
|
||||
} else if clientType == "client" {
|
||||
session = so.GetQuery().Get("token")
|
||||
obj := data.GetSession(session)
|
||||
if obj == nil {
|
||||
return
|
||||
}
|
||||
|
||||
ok, server := data.HasServer(obj.ID)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
if debug {
|
||||
log.Println(
|
||||
"Client disconnected to id:",
|
||||
so.GetQuery().Get("control_id"),
|
||||
"with token:",
|
||||
so.GetQuery().Get("token"),
|
||||
"to attraction:",
|
||||
so.GetQuery().Get("attraction"),
|
||||
)
|
||||
}
|
||||
|
||||
data.RemoveSession(session)
|
||||
server.RemoveSession(session, so.GetQuery().Get("attraction"))
|
||||
_ = server.Socket.Emit("data", "{\"channel\":\"SERVER_IN_UNREGISTER_CLIENT\",\"data\":{\"payload\":{\"uuid\":\""+obj.UUID+"\"},\"type\":\"ClientDisconnectPayload\"}}")
|
||||
clientQuit(so)
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -80,93 +39,3 @@ func Load(namespace socketio.Namespace, b bool) {
|
|||
fmt.Println(err)
|
||||
})
|
||||
}
|
||||
|
||||
func serverLogin(so socketio.Socket) {
|
||||
id := so.GetQuery().Get("id")
|
||||
if !data.CanServer(id) {
|
||||
if debug {
|
||||
log.Println(
|
||||
"Server with id:",
|
||||
so.GetQuery().Get("id"),
|
||||
"already connected",
|
||||
)
|
||||
}
|
||||
|
||||
_ = so.Close()
|
||||
return
|
||||
}
|
||||
|
||||
data.AddServer(&objects.Server{
|
||||
ID: id,
|
||||
Sessions: make(map[string]socketio.Socket),
|
||||
Attraction: make(map[string]string),
|
||||
Socket: so,
|
||||
})
|
||||
if debug {
|
||||
log.Println(
|
||||
"Server with id:",
|
||||
so.GetQuery().Get("id"),
|
||||
"connected",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func clientLogin(so socketio.Socket) {
|
||||
if !data.CanSession(so.GetQuery().Get("token")) {
|
||||
_ = so.Close()
|
||||
return
|
||||
}
|
||||
|
||||
ok, server := data.HasServer(so.GetQuery().Get("control_id"))
|
||||
if !ok {
|
||||
if debug {
|
||||
log.Println(
|
||||
"No server with id:",
|
||||
so.GetQuery().Get("control_id"),
|
||||
"for token:",
|
||||
so.GetQuery().Get("token"),
|
||||
)
|
||||
}
|
||||
_ = so.Emit("close", "SERVER_ERROR")
|
||||
_ = so.Close()
|
||||
return
|
||||
}
|
||||
|
||||
ok = server.CanAttraction(so.GetQuery().Get("attraction"))
|
||||
if !ok {
|
||||
if debug {
|
||||
log.Println(
|
||||
"Server with id:",
|
||||
so.GetQuery().Get("control_id"),
|
||||
"already has operator for attraction:",
|
||||
so.GetQuery().Get("attraction"),
|
||||
)
|
||||
}
|
||||
_ = so.Emit("close", "AUTHENTICATION_ERROR")
|
||||
_ = so.Close()
|
||||
return
|
||||
}
|
||||
|
||||
data.AddSession(&objects.Session{
|
||||
Token: so.GetQuery().Get("token"),
|
||||
UUID: so.GetQuery().Get("uuid"),
|
||||
ID: so.GetQuery().Get("control_id"),
|
||||
Attraction: so.GetQuery().Get("attraction"),
|
||||
})
|
||||
server.AddSession(so.GetQuery().Get("token"), so.GetQuery().Get("attraction"), so)
|
||||
if debug {
|
||||
log.Println(
|
||||
"Client connected to id:",
|
||||
so.GetQuery().Get("control_id"),
|
||||
"with token:",
|
||||
so.GetQuery().Get("token"),
|
||||
"to attraction:",
|
||||
so.GetQuery().Get("attraction"),
|
||||
)
|
||||
}
|
||||
|
||||
err := server.Socket.Emit("data", "{\"channel\":\"SERVER_IN_REGISTER_CLIENT\",\"data\":{\"payload\":{\"uuid\":\""+so.GetQuery().Get("uuid")+"\",\"token\":\""+so.GetQuery().Get("token")+"\",\"attraction_id\":\""+so.GetQuery().Get("attraction")+"\"},\"type\":\"ClientConnectPayload\"}}")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
|
|
62
handlers/user/server.go
Normal file
62
handlers/user/server.go
Normal file
|
@ -0,0 +1,62 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"github.com/Mindgamesnl/socketio"
|
||||
"github.com/ParadoxPixel/ThemePark-Websocket/data"
|
||||
"github.com/ParadoxPixel/ThemePark-Websocket/objects"
|
||||
"log"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func serverLogin(so socketio.Socket) {
|
||||
id := so.GetQuery().Get("id")
|
||||
if !data.CanServer(id) {
|
||||
if debug {
|
||||
log.Println(
|
||||
"Server with id:",
|
||||
so.GetQuery().Get("id"),
|
||||
"already connected",
|
||||
)
|
||||
}
|
||||
|
||||
_ = so.Close()
|
||||
return
|
||||
}
|
||||
|
||||
data.AddServer(&objects.Server{
|
||||
ID: id,
|
||||
Sessions: make(map[string]socketio.Socket),
|
||||
Attraction: make(map[string]string),
|
||||
Socket: so,
|
||||
Mux: new(sync.RWMutex),
|
||||
})
|
||||
if debug {
|
||||
log.Println(
|
||||
"Server with id:",
|
||||
so.GetQuery().Get("id"),
|
||||
"connected",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func serverQuit(so socketio.Socket) {
|
||||
session := so.GetQuery().Get("id")
|
||||
obj := data.RemoveServer(session)
|
||||
if obj == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if debug {
|
||||
log.Println(
|
||||
"Server with id:",
|
||||
so.GetQuery().Get("id"),
|
||||
"disconnected",
|
||||
)
|
||||
}
|
||||
|
||||
// Disconnect users
|
||||
for _, user := range obj.Sessions {
|
||||
_ = user.Emit("close", "SERVER_ERROR")
|
||||
_ = user.Close()
|
||||
}
|
||||
}
|
Reference in a new issue