Skip to content

Commit

Permalink
added lobby support for test client
Browse files Browse the repository at this point in the history
  • Loading branch information
mechmind committed Oct 27, 2013
1 parent 12db2a4 commit e581cd9
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 13 deletions.
65 changes: 65 additions & 0 deletions client/lobbyclient.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package main

import (
"encoding/json"
"errors"
"io/ioutil"
"net/http"
"net/url"
)


type LobbyClient struct {
server string
}

func NewLobbyClient(server string) *LobbyClient {
return &LobbyClient{server}
}

type LoginMessage struct {
Type string `json:"type"`
Server string `json:"server"`
Session string `json:"session_id"`
Player string `json:"player_id"`
Glyph string `json:"player_glyph"`
}

func (l *LobbyClient) NewGame(name string) (server, session, player, glyph string, err error) {
serverUrl := "http://" + l.server + "/games/"
values := url.Values{"name": {name}}
resp, err := http.PostForm(serverUrl, values)
if err != nil {
return
}
defer resp.Body.Close()

answer, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}

login := &LoginMessage{}
err = json.Unmarshal(answer, login)
if err != nil {
err = errors.New(string(answer) + "\n" + err.Error())
return
}

// check response
if login.Type != "join-game" {
err = errors.New("invalid type: " + login.Type)
}

// all fields must be filled
if login.Server == "" ||
login.Session == "" ||
login.Player == "" ||
login.Glyph == "" {

err = errors.New("invalid login msg")
return
}

return login.Server, login.Session, login.Player, login.Glyph, nil
}
46 changes: 33 additions & 13 deletions client/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,47 @@ import (
)

var session = flag.String("session", "", "session to attach to")
var server = flag.String("server", "localhost:8080", "admin interface endoint")
var host = flag.String("host", "localhost:9090", "game host endpoint")
var server = flag.String("server", "", "admin interface endoint")
var host = flag.String("host", "", "game host endpoint")

var lobby = flag.String("lobby", "localhost:8080", "lobby api endpoint")
var name = flag.String("name", "player", "player name")


func main() {
flag.Parse()
hc := NewHttpAdminClient(*server)
var err error
if *session == "" {
*session, err = hc.CreateSession()
var player, glyph string

if *host != "" && *server != "" {
// use admin interface directly
log.Println("main: admin-mode")
hc := NewHttpAdminClient(*server)
if *session == "" {
*session, err = hc.CreateSession()
if err != nil {
log.Println("main: failed to create session", err)
return
}
log.Println("main: created session", *session)
}
player, glyph, err = hc.AttachPlayer(*session)
if err != nil {
log.Println("main: failed to create session", err)
log.Println("main: failed to attach to session", err)
return
}
log.Printf("main: attached to session '%s' as player '%s', glyph %s", *session, player,
glyph)
} else {
// use lobby registrator
log.Println("main: client-mode")
client := NewLobbyClient(*lobby)
*host, *session, player, glyph, err = client.NewGame(*name)
if err != nil {
log.Println("main: cannot join game: ", err)
return
}
log.Println("main: created session", *session)
}
player, glyph, err := hc.AttachPlayer(*session)
if err != nil {
log.Println("main: failed to attach to session", err)
return
}
log.Printf("main: attached to session '%s' as player '%s', glyph %s", *session, player, glyph)

c := NewClient(*host, *session, player, glyph)
err = c.Connect()
Expand Down

0 comments on commit e581cd9

Please sign in to comment.