get rid of crazy id scheme

that was so unecessary wow
master
Jordan Orelli 5 years ago
parent 245d44e302
commit e629c0b6b6

@ -2,11 +2,12 @@ package main
import (
"fmt"
"math/rand"
"time"
)
type Game struct {
id Id
id string
start time.Time
end time.Time
done chan interface{}
@ -30,9 +31,20 @@ func gamesTable() {
}
}
func init() { rand.Seed(time.Now().UnixNano()) }
func newID() string {
chars := []rune("ABCDEEEEEEEEFGHJJJJJJJKMNPQQQQQQQRTUVWXXXXXYZZZZZ234677777789")
id := make([]rune, 0, 4)
for i := 0; i < cap(id); i++ {
id = append(id, chars[rand.Intn(len(chars))])
}
return string(id)
}
func NewGame() *Game {
game := &Game{
id: NewId(),
id: newID(),
start: time.Now(),
done: make(chan interface{}),
connections: make(map[*Connection]bool, 32),
@ -61,7 +73,7 @@ func (g *Game) Create() error {
(id, start)
values
(?, ?)
;`, g.id.String(), g.start)
;`, g.id, g.start)
if err != nil {
return fmt.Errorf("error writing sqlite insert statement to create game: %v")
}

55
id.go

@ -1,55 +0,0 @@
package main
import (
"encoding/binary"
"fmt"
"sync/atomic"
"time"
)
// NewObjectId returns a new unique ObjectId.
// This function causes a runtime error if it fails to get the hostname
// of the current machine.
func NewId() Id {
b := make([]byte, 12)
// Timestamp, 4 bytes, big endian
binary.BigEndian.PutUint32(b, uint32(time.Now().Unix()))
b[4] = global.machineId[0]
b[5] = global.machineId[1]
b[6] = global.machineId[2]
// Pid, 2 bytes, specs don't specify endianness, but we use big endian.
b[7] = byte(global.pid >> 8)
b[8] = byte(global.pid)
// Increment, 3 bytes, big endian
i := atomic.AddUint32(&global.idCounter, 1)
b[9] = byte(i >> 16)
b[10] = byte(i >> 8)
b[11] = byte(i)
return Id(b)
}
// Id is used for tagging each incoming http request for logging
// purposes. The actual implementation is just the ObjectId implementation
// found in launchpad.net/mgo/bson. This will most likely change and evolve
// into its own format.
type Id string
func (id Id) String() string {
return fmt.Sprintf("%x", string(id))
}
// Time returns the timestamp part of the id.
// It's a runtime error to call this method with an invalid id.
func (id Id) Time() time.Time {
secs := int64(binary.BigEndian.Uint32(id.byteSlice(0, 4)))
return time.Unix(secs, 0)
}
// byteSlice returns byte slice of id from start to end.
// Calling this function with an invalid id will cause a runtime panic.
func (id Id) byteSlice(start, end int) []byte {
if len(id) != 12 {
panic(fmt.Sprintf("Invalid Id: %q", string(id)))
}
return []byte(string(id)[start:end])
}

@ -88,10 +88,12 @@ func main() {
error_log = log.New(os.Stderr, "[ERROR] ", 0)
setupDb()
listener, err := net.Listen("tcp", ":9220")
addr := ":9220"
listener, err := net.Listen("tcp", addr)
if err != nil {
bail(E_No_Port, "unable to start server: %v", err)
}
log_info("listening on %s", addr)
go func() {
for {

Loading…
Cancel
Save