Hello go\!

This commit is contained in:
Jan Halfar 2013-08-22 09:44:26 +02:00
commit 6c93a9b710
6 changed files with 228 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
.*
!.git*
/main
/ContentServer.sublime-project
/ContentServer.sublime-workspace

6
doc.go Normal file
View File

@ -0,0 +1,6 @@
// ContentServer project doc.go
/*
ContentServer document
*/
package main

9
main.go Normal file
View File

@ -0,0 +1,9 @@
package main
import (
"github.com/foomo/ContentServer/server"
)
func main() {
server.Run()
}

41
server/node/node.go Normal file
View File

@ -0,0 +1,41 @@
package node
import (
"fmt"
"strings"
)
type Node struct {
Id string `json:"id"`
Path string `json:"path"`
Names map[string]string `json:"names"`
Nodes map[string]*Node `json:"nodes"`
Index []string `json:"index"`
}
const (
INDENT string = "\t"
)
func (node *Node) AddNode(name string, childNode *Node) (me *Node) {
node.Nodes[name] = childNode
return node
}
func (node *Node) PrintNode(id string, level int) {
prefix := strings.Repeat(INDENT, level)
fmt.Printf("%s %s:\n", prefix, id)
for lang, name := range node.Names {
fmt.Printf("%s %s: %s\n", prefix+INDENT, lang, name)
}
for key, childNode := range node.Nodes {
childNode.PrintNode(key, level+1)
}
}
func NewNode(id string, names map[string]string) *Node {
node := new(Node)
node.Id = id
node.Names = names
return node
}

68
server/repo/repo.go Normal file
View File

@ -0,0 +1,68 @@
package repo
import (
"encoding/json"
"fmt"
"github.com/foomo/ContentServer/server/node"
"io/ioutil"
"net/http"
)
type SiteContent struct {
Path string `json: path`
}
func NewSiteContent() *SiteContent {
content := new(SiteContent)
return content
}
type Repo struct {
server string
Directory map[string]node.Node
}
func NewRepo(server string) *Repo {
repo := new(Repo)
repo.server = server
return repo
}
func (repo *Repo) GetContent(path string) *SiteContent {
content := NewSiteContent()
content.Path = path
return content
}
func (repo *Repo) builDirectory(dirNode *node.Node) {
repo.Directory[dirNode.Path] = *dirNode
for _, childNode := range dirNode.Nodes {
repo.builDirectory(childNode)
}
}
func (repo *Repo) Update() interface{} {
response, err := http.Get(repo.server)
if err != nil {
fmt.Printf("%s", err)
return "aua"
} else {
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf("%s", err)
}
fmt.Printf("json string %s", string(contents))
jsonNode := node.NewNode("/foo", map[string]string{"en": "foo"})
jsonErr := json.Unmarshal(contents, &jsonNode)
if jsonErr != nil {
fmt.Println("wtf")
}
//fmt.Printf("obj %v", jsonNode)
jsonNode.PrintNode("root", 0)
repo.Directory = make(map[string]node.Node)
repo.builDirectory(jsonNode)
return jsonNode
}
}

98
server/server.go Normal file
View File

@ -0,0 +1,98 @@
package server
import (
"encoding/json"
"fmt"
//"github.com/foomo/ContentServer/server/node"
"github.com/foomo/ContentServer/server/repo"
//"log"
"net/http"
"strings"
)
var i int = 0
var contentRepo *repo.Repo
func toJson(obj interface{}) (s string) {
b, err := json.MarshalIndent(obj, "", " ")
if err != nil {
s = ""
return
}
s = string(b)
return
}
func jsonResponse(w http.ResponseWriter, obj interface{}) {
fmt.Fprint(w, toJson(obj))
}
func contentHandler(w http.ResponseWriter, r *http.Request) {
/*
i++
log.Println("request #", i, r)
childNode := node.NewNode("/foo", map[string]string{"en": "foo"})
parentNode := node.NewNode("/", map[string]string{"en": "root"}).AddNode("foo", childNode)
jsonResponse(w, parentNode)
*/
uriParts := strings.Split(r.RequestURI, "/")
jsonResponse(w, contentRepo.GetContent(uriParts[2]))
}
func wtfHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "tank you for your request, but i am totally lost with it\n", r.RequestURI, "\n")
}
func update() interface{} {
contentRepo.Update()
/*
response, err := http.Get("http://test.bestbytes/foomo/modules/Foomo.Page.Content/services/content.php")
if err != nil {
fmt.Printf("%s", err)
return "aua"
} else {
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf("%s", err)
}
fmt.Printf("json string %s", string(contents))
jsonNode := node.NewNode("/foo", map[string]string{"en": "foo"})
jsonErr := json.Unmarshal(contents, &jsonNode)
if jsonErr != nil {
fmt.Println("wtf")
}
//fmt.Printf("obj %v", jsonNode)
jsonNode.PrintNode("root", 0)
return jsonNode
}
*/
return contentRepo.Directory
}
func commandHandler(w http.ResponseWriter, r *http.Request) {
parts := strings.Split(r.RequestURI, "/")
switch true {
case true == (len(parts) > 1):
switch parts[2] {
case "update":
jsonResponse(w, update())
return
default:
help := make(map[string]interface{})
help["input"] = parts[2]
help["commands"] = []string{"update", "help"}
jsonResponse(w, help)
}
default:
wtfHandler(w, r)
}
}
func Run() {
contentRepo = repo.NewRepo("http://test.bestbytes/foomo/modules/Foomo.Page.Content/services/content.php")
http.HandleFunc("/content/", contentHandler)
http.HandleFunc("/cmd/", commandHandler)
http.HandleFunc("/", wtfHandler)
http.ListenAndServe(":8080", nil)
}