Skip to content
Snippets Groups Projects
Commit 64bea5f3 authored by julian.ruhl's avatar julian.ruhl
Browse files

Unknown

parent 3a52b43b
No related branches found
No related tags found
No related merge requests found
# TP2_Freenet_Go_Socket # TP2 Freenet Go Socket
Our amazing project ! Groupe: MARTINOTY, Jérémy; RÜHL, Julian
\ No newline at end of file
#
\ No newline at end of file
...@@ -59,7 +59,11 @@ for i in range(6): ...@@ -59,7 +59,11 @@ for i in range(6):
nodes.append(new_instance) nodes.append(new_instance)
print("Instance : " + instance_name + " created !") print("Instance : " + instance_name + " created !")
<<<<<<< Updated upstream
print("Waiting 60 seconds for cloud-init completion...") print("Waiting 60 seconds for cloud-init completion...")
=======
print("Waiting 60 seconds for cloud-init completion...");
>>>>>>> Stashed changes
sleep(60) sleep(60)
for instance in nodes: for instance in nodes:
......
...@@ -15,6 +15,7 @@ import ( ...@@ -15,6 +15,7 @@ import (
type Message struct { type Message struct {
Id int Id int
Key int Key int
Ttl int
Type_ string Type_ string
} }
...@@ -36,15 +37,16 @@ var ( ...@@ -36,15 +37,16 @@ var (
requests []Message requests []Message
) )
func createMessage(id int, key int, _type string) Message { func createMessage(id int, key int, ttl int, _type string) Message {
return Message{ return Message{
Id: id, Id: id,
Key: key, Key: key,
Ttl: ttl,
Type_: _type, Type_: _type,
} }
} }
func createContenu(key int, origin string) { func createContenu(key int, origin string) Contenu {
return Contenu{ return Contenu{
Key: key, Key: key,
Origin: origin, Origin: origin,
...@@ -52,11 +54,24 @@ func createContenu(key int, origin string) { ...@@ -52,11 +54,24 @@ func createContenu(key int, origin string) {
} }
func fillContents() { func fillContents() {
rands := [10]int var rands = [10]int{}
rand.Seed(time.Now().UnixNano()) rand.Seed(time.Now().UnixNano())
for i := 0; i < len(rands); i++ { for i := 0; i < len(rands); i++ {
rands[i] = rand.Intn(100) rands[i] = rand.Intn(100)
contents = append(contents, createContenu(v[i],node.Address)) contents = append(contents, createContenu(rands[i], thisnode.Address))
}
if thisnode.Id == 1 {
contents[3] = createContenu(0xc0ffee, thisnode.Address)
}
if thisnode.Id == 2 {
contents[2] = createContenu(0xdead, thisnode.Address)
}
if thisnode.Id == 3 {
contents[1] = createContenu(0xbeef, thisnode.Address)
} }
} }
...@@ -113,39 +128,58 @@ func handleNewConn(conn net.Conn) { ...@@ -113,39 +128,58 @@ func handleNewConn(conn net.Conn) {
fmt.Printf("Received : %+v", msg) fmt.Printf("Received : %+v", msg)
if msg.Type_ == "REQUEST" { if msg.Type_ == "REQUEST" {
handleRequest(msg, conn) handleRequest(*msg, conn)
} else if msg.Type_ == "POSITIVE" { } else if msg.Type_ == "POSITIVE" {
handlePositiveMessage(msg, conn) handlePositiveMessage(*msg, conn)
} else { } else {
handleNegativeMessage(msg, conn) handleNegativeMessage(*msg, conn)
}
} }
func handleNegativeMessage(msg Message, conn net.Conn) {
} }
func handlePositiveMessage(msg Message, conn net.Conn) { func handlePositiveMessage(msg Message, conn net.Conn) {
//transmettre message au noeud qui a démandé SAUF si nous étions le demandeur //transmettre message au noeud qui a démandé SAUF si nous étions le demandeur
} }
func getNode(id int) Node {
for _, node := range thisnode.Neighbours {
if node.Id == id {
return node
}
}
return thisnode
}
func handleRequest(msg Message, conn net.Conn) { func handleRequest(msg Message, conn net.Conn) {
new_ttl := msg.Ttl - 1
if hasAlreadyRequested(msg) {
sendMessage(createMessage(thisnode.Id, msg.Key, new_ttl, "NEGATIVE"), getNode(msg.Id))
} else {
requests = append(requests, msg) requests = append(requests, msg)
if hasKey(msg.Key) { if hasKey(msg.Key) {
sendMessage(createMessage(thisnode.Id, msg.Key, "POSITIVE")) sendMessage(createMessage(thisnode.Id, msg.Key, new_ttl, "POSITIVE"), getNode(msg.Id))
} else { } else {
//demander aux autres noeuds sendMessageAllExcept(createMessage(thisnode.Id, msg.Key, new_ttl, "REQUEST"), getNode(msg.Id))
}
} }
} }
func hasKey(key int) bool { func hasKey(key int) bool {
for _, element := range content { for _, element := range contents {
if key == element.Key { if key == element.Key {
key_found = true return true
} }
} }
return false
} }
func hasAlreadyRequested(newreq Message) bool { func hasAlreadyRequested(newreq Message) bool {
for _, request := range requests { for _, request := range requests {
if request.Id == newreq.Id && request.Key == newreq.Key { if request.Key == newreq.Key {
return true return true
} }
} }
...@@ -160,19 +194,27 @@ func main() { ...@@ -160,19 +194,27 @@ func main() {
thisnode := readYaml(os.Args[2]) thisnode := readYaml(os.Args[2])
port := os.Args[1] port := os.Args[1]
fillContents()
fmt.Println("Starting server on " + thisnode.Address + ":" + port)
initial_node := false
if os.Args[3] == "INIT" { if os.Args[3] == "INIT" {
initial_node = true
} else if os.Args[3] != "WAIT" {
fmt.Println("Bad invocation. Require INIT or WAIT!")
os.Exit(0)
} }
fillContents()
fmt.Println("Starting server on " + thisnode.Address + ":" + port)
listenSocket, err := net.Listen("tcp", thisnode.Address+":"+port) listenSocket, err := net.Listen("tcp", thisnode.Address+":"+port)
checkError(err) checkError(err)
defer listenSocket.Close() defer listenSocket.Close()
if initial_node {
sendMessage(createMessage(thisnode.Id, 0xc0ffee, 3, "REQUEST"), thisnode.Neighbours[0])
}
for { for {
connection, err := listenSocket.Accept() connection, err := listenSocket.Accept()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment