summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine.go103
-rw-r--r--hexfool.go196
-rw-r--r--log.go2
-rw-r--r--redigo.go10
4 files changed, 283 insertions, 28 deletions
diff --git a/engine.go b/engine.go
index 3186f5f..50dbef3 100644
--- a/engine.go
+++ b/engine.go
@@ -1,8 +1,105 @@
package main
+import (
+ "fmt"
+ "time"
+ "math/rand"
+)
+
+type Terrain struct {
+ name,ressource string
+ temp int
+}
+
+type Skill struct {
+ name string
+
+}
+
+var terrains []Terrain
+
+func init() {
+ rand.Seed( time.Now().UnixNano())
+ terrains = []Terrain{
+ {"Plains", "Food", 20},
+ {"Forrest", "Wood", 15},
+ {"Hills", "Stone", 15},
+ {"Mountains", "Iron", 5},
+ }
+
+
+}
+
+func getNew(lvl int) int {
+ l0 := 1
+ l1 := 2
+ l2 := 4
+ l3 := 7
+ l4 := 11
+ l5 := 16
+
+ for n := 1; n<=lvl; n++ {
+ if (n-1) > 6 {
+ l0 = l0 + 6
+ }else{
+ l0 = l0 + (n - 1)
+ }
+ if n > 6 {
+ l1 = l1 + 6
+ }else{
+ l1 = l1 + n
+ }
+ if (n + 1) > 6 {
+ l2 = l2 + 6
+ }else{
+ l2 = l2 + (n + 1)
+ }
+ if (n + 2) > 6 {
+ l3 = l3 + 6
+ }else{
+ l3 = l3 + (n + 2)
+ }
+ if (n + 3) > 6 {
+ l4 = l4 +6
+ }else{
+ l4 = l4 + (n + 3)
+ }
+ l5 = l5 + 6
+ switch lvl {
+ case l0:
+ return 0
+ case l1:
+ return 1
+ case l2:
+ return 2
+ case l3:
+ return 3
+ case l4:
+ return 4
+ case l5:
+ return 5
+ default:
+
+ }
+ }
+ return 0
+
+}
+
+func getNewArea(x,y,z int, nam string) Area {
+ t := time.Now()
+ ts := t.Format("2006-01-02 15:04:05")
+ Log(nam + " has Created new Area")
+ //fmt.Println(terrains)
+ return Area{x,y,z,ts,nam,0,0}
+ //myArea := Area{x,y,ts,nam,0,0}
+ //return myArea
+}
+
+func testEngine(){
+ for i := 1; i <30; i++ {
+ fmt.Println("lvl",i,"getNew:",getNew(i))
+ }
-func getNewArea(x,y int, nam string) Area {
- myArea := Area{x,y,0,nam,0,0}
- return myArea
}
diff --git a/hexfool.go b/hexfool.go
index 854e055..fad5d1d 100644
--- a/hexfool.go
+++ b/hexfool.go
@@ -1,17 +1,45 @@
package main
-import "database/sql"
-import _ "github.com/go-sql-driver/mysql"
+import (
+ "database/sql"
+ _ "github.com/go-sql-driver/mysql"
+ "golang.org/x/crypto/bcrypt"
-import "golang.org/x/crypto/bcrypt"
-
-import "net/http"
-import "strings"
-import "os/exec"
+ "net/http"
+ "strings"
+ "os/exec"
+ "encoding/json"
+ _ "strconv"
+ "fmt"
+ "io"
+ "time"
+)
var db *sql.DB
var err error
+type UserIdent struct {
+ Name string
+ Token string
+ Action string
+ level int
+ experience int
+ //Token []byte
+ //lastact int
+}
+
+type Area struct {
+ coord_x int
+ coord_y int
+ coord_z int
+ created string
+ player string
+ terrtype int
+ wealth int
+}
+
+type Map []Area
+
func signupPage(res http.ResponseWriter, req *http.Request) {
if req.Method != "POST" {
http.ServeFile(res, req, "html/signup.html")
@@ -34,15 +62,15 @@ func signupPage(res http.ResponseWriter, req *http.Request) {
panic(err)
return
}
- newuuid, uiderr := exec.Command("uuidgen").Output()
- if uiderr != nil{
- http.Error(res, "Server Error creating UUID. Unable to create account! You Fool...", 500)
- Log("ERROR 500 - Creating UUID failed")
- panic(uiderr)
- return
- }
+ //newuuid, uiderr := exec.Command("uuidgen").Output()
+ //if uiderr != nil{
+ // http.Error(res, "Server Error creating UUID. Unable to create account! You Fool...", 500)
+ // Log("ERROR 500 - Creating UUID failed")
+ // panic(uiderr)
+ // return
+ //}
- _, err = db.Exec("INSERT INTO players(username, password, email) VALUES(?, ?, ?)", username, hashedPassword, email)
+ _, err = db.Exec("INSERT INTO players(username, password, email,level,experience) VALUES(?, ?, ?, ?, ?)", username, hashedPassword, email, 1, 0)
if err != nil {
http.Error(res, "Server Error Inserting User. Unable to create account! You Fool...", 500)
Log("ERROR adding user"+username)
@@ -51,7 +79,7 @@ func signupPage(res http.ResponseWriter, req *http.Request) {
return
}
res.Write([]byte("User Created Successfully!"))
- Log("Successfully Created User"+username+string(newuuid))
+ Log("Successfully Created User"+username+" email:"+email)
//fmt.Println("Successfully Created User",username,newuuid)
return
case err != nil:
@@ -75,13 +103,15 @@ func loginPage(res http.ResponseWriter, req *http.Request) {
var databaseUsername string
var databasePassword string
+ var databaseLevel int
+ var databaseExp int
// var databaseUUID string
- err := db.QueryRow("SELECT username, password FROM players WHERE username=?", username).Scan(&databaseUsername, &databasePassword)
+ err := db.QueryRow("SELECT username, password, level, experience FROM players WHERE username=?", username).Scan(&databaseUsername, &databasePassword, &databaseLevel, &databaseExp)
if err != nil {
http.Redirect(res, req, "/login", 301)
- Log("Failed Login atempt by "+username)
+ Log("Failed Login atempt by "+username+" ;"+err.Error())
//fmt.Println("Failed Login atempt by",username)
return
}
@@ -102,11 +132,34 @@ func loginPage(res http.ResponseWriter, req *http.Request) {
panic(uiderr)
return
}
-
+ type userAction struct {
+ Name string
+ Token string
+ Action string
+ }
+ useract := userAction{
+ Name: username,
+ Token: token,
+ Action: "nil",
+ }
+ jout, err := json.Marshal(useract)
+ if err != nil {
+ Log("Error:"+ err.Error())
+ }
+ //jout := map[string]string {
+ // "Name":username,
+ // "Token":token,
+ //}
+ //fmt.Println(databaseLevel,databaseExp)
keynam := username + "_token"
- setRed(keynam,token,300)
+ setRed(keynam,token,600)
+ keynam = username + "_lvl"
+ setRed(keynam,databaseLevel,0)
+ keynam = username + "_xp"
+ setRed(keynam,databaseExp,0)
- res.Write([]byte("Hello "+ databaseUsername + "! Your token is "+ string(tok)))
+ res.Write([]byte(string(jout)+" \n\n Have a RESTful party at /game"))
+ //res.Write([]byte("Hello "+ databaseUsername + "! Your token is "+ string(tok)))
Log("Successful Login by "+username)
//fmt.Println("Successful Login by",username)
}
@@ -120,7 +173,107 @@ func homePage(res http.ResponseWriter, req *http.Request) {
http.ServeFile(res, req, "html/index.html")
}
+func gamePage(res http.ResponseWriter, req *http.Request) {
+ if req.Method != "POST" {
+ res.Write([]byte("Access Denied"))
+ Log("Attempted Access to Game")
+ //http.ServeFile(res, req, "html/login.html")
+ return
+ }
+
+ //make byte array
+ out := make([]byte,1024)
+ //
+ bodyLen, err := req.Body.Read(out)
+ if err != io.EOF {
+ fmt.Println(err.Error())
+ res.Write([]byte("{error:" + err.Error() + "}"))
+ return
+ }
+
+ var k UserIdent
+ err = json.Unmarshal(out[:bodyLen],&k)
+ if err != nil {
+ res.Write([]byte("{error:" + err.Error() + "}"))
+ return
+ }
+ //fmt.Println(k.Name, k.Token)
+ if !checkLegit(k) {
+ Log(k.Name +" token Missing")
+ return
+ } //else{
+ // fmt.Println("Nice")
+ //}
+ //somemap := false
+ var mymap Map
+ for {
+ mymap = getSQLMap(k.Name)
+ if mymap == nil {
+ //so := getNewArea(0,0,k.Name)
+ //fmt.Println("New:",so)
+ if !addSQLMap(getNewArea(0,0,0,k.Name)) {
+ return
+ }
+ }
+ break
+ }
+ fmt.Println("MyMap:",mymap)
+ testEngine()
+}
+
+func getSQLMap(nam string) Map {
+ var rmap Map
+ results,err := db.Query("SELECT coord_x, coord_y, coord_z, created, player, terrtype, wealth FROM maps WHERE player=?",nam)
+ if err != nil {
+ panic(err.Error())
+ }
+ i := 0
+ for results.Next(){
+ i++
+ var tf Area
+ err = results.Scan(&tf.coord_x, &tf.coord_y, &tf.coord_z, &tf.created, &tf.player, &tf.terrtype, &tf.wealth)
+ if err != nil {
+ panic(err.Error())
+ }
+ rmap=append(rmap,tf)
+ }
+ if i==0 {
+ Log(nam + " Has Empty Map.")
+ return nil
+ }
+ return rmap
+}
+
+func addSQLMap(newar Area) bool {
+ _, err = db.Exec("INSERT INTO maps(coord_x, coord_y, player, terrtype, wealth) VALUES(?, ?, ?, ?, ?)", newar.coord_x, newar.coord_y, newar.player, newar.terrtype, newar.wealth)
+ if err != nil {
+ Log("ERROR adding area for user "+newar.player)
+ panic(err)
+ return false
+ }
+ return true
+}
+
+func checkLegit(usr UserIdent) bool{
+ namet := usr.Name+"_token"
+
+ if usr.Token == getRed(namet) {
+ return true
+ }
+ return false
+ //fmt.Println(getRed(namet))
+}
+
func main() {
+ //var tstart time
+
+ tstart := time.Now()
+ fmt.Println("Hexfool startet at", tstart)
+
+ defer fmt.Println("Goodbye! Uptime", (time.Now().Second()-tstart.Second()))
+ //defer(tend := time.Now()-tstart)
+
+
db, err = sql.Open("mysql", "hexmaster:waSIdocHneTdUobeRoarscH@tcp(192.168.0.16)/hexmaster")
if err != nil {
panic(err.Error())
@@ -134,6 +287,7 @@ func main() {
http.HandleFunc("/signup", signupPage)
http.HandleFunc("/login", loginPage)
+ http.HandleFunc("/game", gamePage)
http.HandleFunc("/", homePage)
http.ListenAndServe(":8088", nil)
}
diff --git a/log.go b/log.go
index 976ce91..bb27515 100644
--- a/log.go
+++ b/log.go
@@ -16,7 +16,7 @@ func Log(text string) {
}
defer f.Close()
- full := time.Now().String() + text
+ full := time.Now().String() + " "+ text
if _, err = f.WriteString(full+"\n"); err != nil {
panic(err)
}
diff --git a/redigo.go b/redigo.go
index f83b174..ccac3cd 100644
--- a/redigo.go
+++ b/redigo.go
@@ -23,10 +23,14 @@ func init() {
//client.FlushDB()
}
-func getRed(key string) string {
+func delRed(key string) error {
+ return client.Dump(key).Err()
+}
+
+func getRed(key string) interface{} {
val, err := client.Get(key).Result()
if err == redis.Nil {
- return "nil"
+ return nil
} else if err != nil {
panic(err)
return err.Error()
@@ -35,7 +39,7 @@ func getRed(key string) string {
}
}
-func setRed(key string , val string, dur int) bool {
+func setRed(key string , val interface{}, dur int) bool {
err := client.Set(key, val,time.Duration(dur)*time.Second).Err()
if err != nil {
panic(err)