Refactor into server object to handle registered accounts
This commit is contained in:
parent
eccb726f74
commit
93decc027b
13 changed files with 304 additions and 128 deletions
|
@ -1,10 +1,13 @@
|
|||
package rove
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/mdiluz/rove/pkg/server"
|
||||
)
|
||||
|
||||
// Connection is the container for a simple connection to the server
|
||||
|
@ -19,13 +22,8 @@ func NewConnection(host string) *Connection {
|
|||
}
|
||||
}
|
||||
|
||||
// StatusResponse is a struct that contains information on the status of the server
|
||||
type StatusResponse struct {
|
||||
Ready bool `json:"ready"`
|
||||
}
|
||||
|
||||
// Status returns the current status of the server
|
||||
func (c *Connection) Status() (status StatusResponse, err error) {
|
||||
func (c *Connection) Status() (status server.StatusResponse, err error) {
|
||||
url := url.URL{
|
||||
Scheme: "http",
|
||||
Host: c.host,
|
||||
|
@ -33,9 +31,9 @@ func (c *Connection) Status() (status StatusResponse, err error) {
|
|||
}
|
||||
|
||||
if resp, err := http.Get(url.String()); err != nil {
|
||||
return StatusResponse{}, err
|
||||
return server.StatusResponse{}, err
|
||||
} else if resp.StatusCode != http.StatusOK {
|
||||
return StatusResponse{}, fmt.Errorf("Status request returned %d", resp.StatusCode)
|
||||
return server.StatusResponse{}, fmt.Errorf("Status request returned %d", resp.StatusCode)
|
||||
} else {
|
||||
err = json.NewDecoder(resp.Body).Decode(&status)
|
||||
}
|
||||
|
@ -43,26 +41,36 @@ func (c *Connection) Status() (status StatusResponse, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
// RegisterResponse
|
||||
type RegisterResponse struct {
|
||||
Id string `json:"id"`
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
// Register registers a new player on the server
|
||||
func (c *Connection) Register() (register RegisterResponse, err error) {
|
||||
// Register registers a new account on the server
|
||||
func (c *Connection) Register(name string) (register server.RegisterResponse, err error) {
|
||||
url := url.URL{
|
||||
Scheme: "http",
|
||||
Host: c.host,
|
||||
Path: "register",
|
||||
}
|
||||
|
||||
if resp, err := http.Get(url.String()); err != nil {
|
||||
return RegisterResponse{}, err
|
||||
} else if resp.StatusCode != http.StatusOK {
|
||||
return RegisterResponse{}, fmt.Errorf("Status request returned %d", resp.StatusCode)
|
||||
// Marshal the register data struct
|
||||
data := server.RegisterData{Name: name}
|
||||
marshalled, err := json.Marshal(data)
|
||||
|
||||
// Set up the request
|
||||
req, err := http.NewRequest("POST", url.String(), bytes.NewReader(marshalled))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
|
||||
// Do the request
|
||||
client := &http.Client{}
|
||||
if resp, err := client.Do(req); err != nil {
|
||||
return server.RegisterResponse{}, err
|
||||
} else {
|
||||
err = json.NewDecoder(resp.Body).Decode(®ister)
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Handle any errors
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return server.RegisterResponse{}, fmt.Errorf("Status request returned %d", resp.StatusCode)
|
||||
} else {
|
||||
// Decode the reply
|
||||
err = json.NewDecoder(resp.Body).Decode(®ister)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
|
|
|
@ -10,6 +10,7 @@ var serverUrl = "localhost:8080"
|
|||
|
||||
func TestStatus(t *testing.T) {
|
||||
conn := NewConnection(serverUrl)
|
||||
|
||||
if status, err := conn.Status(); err != nil {
|
||||
t.Errorf("Status returned error: %s", err)
|
||||
} else if !status.Ready {
|
||||
|
@ -19,11 +20,28 @@ func TestStatus(t *testing.T) {
|
|||
|
||||
func TestRegister(t *testing.T) {
|
||||
conn := NewConnection(serverUrl)
|
||||
if reg, err := conn.Register(); err != nil {
|
||||
|
||||
reg1, err := conn.Register("one")
|
||||
if err != nil {
|
||||
t.Errorf("Register returned error: %s", err)
|
||||
} else if !reg.Success {
|
||||
} else if !reg1.Success {
|
||||
t.Error("Server did not success for Register")
|
||||
} else if len(reg.Id) == 0 {
|
||||
} else if len(reg1.Id) == 0 {
|
||||
t.Error("Server returned empty registration ID")
|
||||
}
|
||||
|
||||
reg2, err := conn.Register("two")
|
||||
if err != nil {
|
||||
t.Errorf("Register returned error: %s", err)
|
||||
} else if !reg2.Success {
|
||||
t.Error("Server did not success for Register")
|
||||
} else if len(reg2.Id) == 0 {
|
||||
t.Error("Server returned empty registration ID")
|
||||
}
|
||||
|
||||
if reg2, err := conn.Register("one"); err != nil {
|
||||
t.Errorf("Register returned error: %s", err)
|
||||
} else if reg2.Success {
|
||||
t.Error("Server should have failed to register duplicate name")
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue