diff options
| author | Nikolaus Gotsche <n@softwarefools.com> | 2017-10-09 01:26:35 +0200 |
|---|---|---|
| committer | Nikolaus Gotsche <n@softwarefools.com> | 2017-10-09 01:26:35 +0200 |
| commit | 23555819c35b6ebea70460ad4695ada3ea92afea (patch) | |
| tree | ba940708418a11ff78576410ebd4b9dde70450be | |
| parent | b4d150602df5b9a61a3d3b1084524c9317c55cde (diff) | |
| -rw-r--r-- | engine.go | 103 | ||||
| -rw-r--r-- | hexfool.go | 196 | ||||
| -rw-r--r-- | log.go | 2 | ||||
| -rw-r--r-- | redigo.go | 10 |
4 files changed, 283 insertions, 28 deletions
@@ -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 } @@ -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) } @@ -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) } @@ -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) |
