/
magna.go
78 lines (68 loc) · 1.56 KB
/
magna.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"github.com/gorilla/websocket"
"github.com/magna/magnagraph"
"github.com/magna/magnalanguage"
)
//current query being processed
var queryTokens []magnagraph.Node
var stemString string
//graph used to solve queries
var magnasMind magnagraph.Graph
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
func loadMagnasMind() bool {
magnasMind = magnagraph.Graph{0, 0, nil, true}
return true
}
// Handlers for Magana
func testHandler(w http.ResponseWriter, r *http.Request) {
connection, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println(err)
return
}
for {
messageType, p, err1 := connection.ReadMessage()
if err1 != nil {
return
}
fmt.Println(string(p))
err1 = connection.WriteMessage(messageType, p)
if err1 != nil {
return
}
}
}
func queryHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("Query Received.")
body, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
var query magnalanguage.MagnaQueryObject
err = json.Unmarshal([]byte(string(body[:])), &query)
if err != nil {
panic(err)
}
fmt.Println(query)
queryTokens = magnalanguage.TokenizeQuery(query)
stemString = ""
magnalanguage.PartOfSpeachTag(queryTokens)
for _, aNode := range queryTokens {
magnalanguage.ProcessNode(aNode)
magnalanguage.AppendToStemmedSring(stemString, aNode)
}
}
func main() {
loadMagnasMind()
http.HandleFunc("/", testHandler)
http.HandleFunc("/query", queryHandler)
http.ListenAndServe("localhost:8080", nil)
}