|
|
|
package gameServer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/gorilla/websocket"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Player struct {
|
|
|
|
Name string `json:"Name"`
|
|
|
|
Password string `json:"Password"`
|
|
|
|
|
|
|
|
//Connection
|
|
|
|
Conn *websocket.Conn
|
|
|
|
|
|
|
|
AuthString string `json:"AuthString"`
|
|
|
|
|
|
|
|
Level string `json:"Level"` // hidden from user, for balancing purposes
|
|
|
|
|
|
|
|
Kills int `json:"Kills"`
|
|
|
|
Killed int `json:"Killed"`
|
|
|
|
|
|
|
|
Won int `json:"Won"`
|
|
|
|
Lost int `json:"Lost"`
|
|
|
|
WinRate int `json:"WinRate"`
|
|
|
|
|
|
|
|
Health int `json:"Health"`
|
|
|
|
|
|
|
|
Authed bool `json:"Authed"`
|
|
|
|
|
|
|
|
GS *GameServer `json:"GS"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pc *Player) Receiver() {
|
|
|
|
for {
|
|
|
|
_, message, err := pc.Conn.ReadMessage()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("pc err: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
var msg Packet
|
|
|
|
err = json.Unmarshal(message, &msg)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("pc err: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
if !pc.Authed && msg.Type != Auth {
|
|
|
|
reply := Packet{
|
|
|
|
Type: System,
|
|
|
|
Status: 401,
|
|
|
|
Message: nil,
|
|
|
|
}
|
|
|
|
|
|
|
|
authRequired, err := json.Marshal(reply)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("pc err: " + err.Error())
|
|
|
|
}
|
|
|
|
pc.Conn.WriteMessage(websocket.TextMessage, authRequired)
|
|
|
|
|
|
|
|
//Stop processing the packet of unauthed connection
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
switch msg.Type {
|
|
|
|
case Auth:
|
|
|
|
pc.Auth(msg)
|
|
|
|
case Message:
|
|
|
|
|
|
|
|
case PlayerAction:
|
|
|
|
pc.PlayerAction(msg)
|
|
|
|
case System:
|
|
|
|
|
|
|
|
case Lobby:
|
|
|
|
pc.Lobby(msg)
|
|
|
|
default:
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//TODO
|
|
|
|
func (pc *Player) Auth(p Packet) (pr Packet) {
|
|
|
|
// FOR DEV PURPOSES ONLY
|
|
|
|
// This function meant to become an authentication function!
|
|
|
|
pReply := Packet{
|
|
|
|
Type: Auth,
|
|
|
|
Status: 200,
|
|
|
|
Message: nil,
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Println("Auth successful")
|
|
|
|
pc.Authed = true
|
|
|
|
|
|
|
|
return pReply
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pc *Player) Lobby(p Packet) {
|
|
|
|
switch p.Status {
|
|
|
|
case LobbyListRequest: // Lobby list request
|
|
|
|
p.Message = pc.GS.Lobbies
|
|
|
|
p.Status = LobbyListAnswer
|
|
|
|
p.Type = Lobby
|
|
|
|
|
|
|
|
pMarshall, err := json.Marshal(p)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("pc.Lobby: " + err.Error())
|
|
|
|
}
|
|
|
|
pc.Conn.WriteMessage(websocket.TextMessage, pMarshall)
|
|
|
|
|
|
|
|
default:
|
|
|
|
fmt.Println("player unsupported status")
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pc *Player) ReceivedMessage(p Packet) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func (pc *Player) PlayerAction(p Packet) {
|
|
|
|
|
|
|
|
}
|