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

Unknown

parent 3a52b43b
Branches
Tags
No related merge requests found
# TP2_Freenet_Go_Socket
# TP2 Freenet Go Socket
Our amazing project !
\ No newline at end of file
Groupe: MARTINOTY, Jérémy; RÜHL, Julian
#
\ No newline at end of file
......@@ -59,7 +59,11 @@ for i in range(6):
nodes.append(new_instance)
print("Instance : " + instance_name + " created !")
<<<<<<< Updated upstream
print("Waiting 60 seconds for cloud-init completion...")
=======
print("Waiting 60 seconds for cloud-init completion...");
>>>>>>> Stashed changes
sleep(60)
for instance in nodes:
......
......@@ -15,6 +15,7 @@ import (
type Message struct {
Id int
Key int
Ttl int
Type_ string
}
......@@ -36,15 +37,16 @@ var (
requests []Message
)
func createMessage(id int, key int, _type string) Message {
func createMessage(id int, key int, ttl int, _type string) Message {
return Message{
Id: id,
Key: key,
Ttl: ttl,
Type_: _type,
}
}
func createContenu(key int, origin string) {
func createContenu(key int, origin string) Contenu {
return Contenu{
Key: key,
Origin: origin,
......@@ -52,11 +54,24 @@ func createContenu(key int, origin string) {
}
func fillContents() {
rands := [10]int
var rands = [10]int{}
rand.Seed(time.Now().UnixNano())
for i := 0; i < len(rands); i++ {
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) {
fmt.Printf("Received : %+v", msg)
if msg.Type_ == "REQUEST" {
handleRequest(msg, conn)
handleRequest(*msg, conn)
} else if msg.Type_ == "POSITIVE" {
handlePositiveMessage(msg, conn)
handlePositiveMessage(*msg, conn)
} else {
handleNegativeMessage(msg, conn)
handleNegativeMessage(*msg, conn)
}
}
func handleNegativeMessage(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
}
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) {
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)
if hasKey(msg.Key) {
sendMessage(createMessage(thisnode.Id, msg.Key, "POSITIVE"))
sendMessage(createMessage(thisnode.Id, msg.Key, new_ttl, "POSITIVE"), getNode(msg.Id))
} else {
//demander aux autres noeuds
sendMessageAllExcept(createMessage(thisnode.Id, msg.Key, new_ttl, "REQUEST"), getNode(msg.Id))
}
}
}
func hasKey(key int) bool {
for _, element := range content {
for _, element := range contents {
if key == element.Key {
key_found = true
return true
}
}
return false
}
func hasAlreadyRequested(newreq Message) bool {
for _, request := range requests {
if request.Id == newreq.Id && request.Key == newreq.Key {
if request.Key == newreq.Key {
return true
}
}
......@@ -160,19 +194,27 @@ func main() {
thisnode := readYaml(os.Args[2])
port := os.Args[1]
fillContents()
fmt.Println("Starting server on " + thisnode.Address + ":" + port)
initial_node := false
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)
checkError(err)
defer listenSocket.Close()
if initial_node {
sendMessage(createMessage(thisnode.Id, 0xc0ffee, 3, "REQUEST"), thisnode.Neighbours[0])
}
for {
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