From 7d58b3e35492802e2625f2298b07dfa2ad0404b9 Mon Sep 17 00:00:00 2001
From: Julien Debray <julien.debray@etu.hesge.ch>
Date: Wed, 2 Nov 2022 00:01:45 +0100
Subject: [PATCH] Ajout fake et list

---
 client/client.go             | 33 ++++++++++++------------------
 server/server.go             | 39 ++++++++++++++++++++++++++++++------
 server/yaml/neighbour-1.yaml |  4 ++--
 server/yaml/neighbour-3.yaml |  4 ++--
 4 files changed, 50 insertions(+), 30 deletions(-)

diff --git a/client/client.go b/client/client.go
index 40a6f65..17e9cee 100644
--- a/client/client.go
+++ b/client/client.go
@@ -6,13 +6,14 @@ import (
 	"math/rand"
 	"net"
 	"os"
+	"strconv"
 	"time"
 
 	"gopkg.in/yaml.v3"
 )
 
 const (
-	SERVER_HOST = "127.0.0.1"
+	SERVER_HOST = "4.233.112.40"
 	SERVER_PORT = "9876"
 	SERVER_TYPE = "tcp"
 )
@@ -26,9 +27,9 @@ type Transaction struct {
 
 type Data struct {
 	Sender      int      `yaml:"sender"` // = sender's node ID or 0 if sender is not a node
-	Create      bool     `yaml:"create"` // create transaction or verify
-	voteOK      int      `yaml:"voteOK"` // counter for verify
-	voteKO      int      `yaml:"voteKO"` // counter for verify
+	Action      int      `yaml:"create"` // action to do
+	voteOK      int      `yaml:"voteOK"` // counter for vote
+	voteKO      int      `yaml:"voteKO"` // counter for vote
 	Transaction struct { // transaction
 		ID       int     `yaml:"id"`
 		Sender   string  `yaml:"sender"`
@@ -38,17 +39,9 @@ type Data struct {
 }
 
 func main() {
-	if os.Args[1] != "0" && os.Args[1] != "1" {
-		fmt.Print("Use: go run client.go x with x = 0 / 1\n")
-		os.Exit(1)
-	}
-	var create bool
-	if os.Args[1] == "0" {
-		create = false
-	} else {
-		create = true
-	}
-	data := createData(create)
+	action, _ := strconv.Atoi(os.Args[1])
+	// action -> 0: vote / 1: create / 2: fake / 3: list
+	data := createData(action)
 	str, _ := yaml.Marshal(data)
 	connection, err := net.Dial(SERVER_TYPE, SERVER_HOST+":"+SERVER_PORT)
 	if err != nil {
@@ -60,23 +53,23 @@ func main() {
 func createTransaction() Transaction {
 	var transaction Transaction
 	rand2 := rand.New(rand.NewSource(time.Now().UnixNano()))
-	transaction.id = rand2.Intn(1000)
+	transaction.id = rand2.Intn(10000)
 	transaction.sender = "A"
 	transaction.receiver = "B"
 	transaction.amount = 100
 	return transaction
 }
 
-func createData(create bool) Data {
+func createData(action int) Data {
 	var data Data
 	data.Sender = 0
 	data.voteKO = 0
 	data.voteOK = 0
-	data.Create = create
+	data.Action = action
 	transaction := createTransaction()
-	if create {
+	if action == 1 {
 		data.Transaction.ID = transaction.id
-	} else {
+	} else if action != 3 {
 		var transactionID int
 		fmt.Scanf("%d", &transactionID)
 		data.Transaction.ID = transactionID
diff --git a/server/server.go b/server/server.go
index 9741118..69babcb 100644
--- a/server/server.go
+++ b/server/server.go
@@ -40,9 +40,9 @@ type Transaction struct {
 
 type Data struct {
 	Sender      int      `yaml:"sender"` // = sender's node ID or 0 if sender is not a node
-	Create      bool     `yaml:"create"` // create transaction or verify
-	voteOK      int      `yaml:"voteOK"` // counter for verify
-	voteKO      int      `yaml:"voteKO"` // counter for verify
+	Action      int      `yaml:"create"` // action to do
+	voteOK      int      `yaml:"voteOK"` // counter for vote
+	voteKO      int      `yaml:"voteKO"` // counter for vote
 	Transaction struct { // transaction
 		ID       int     `yaml:"id"`
 		Sender   string  `yaml:"sender"`
@@ -84,10 +84,14 @@ func main() {
 
 		data := parseData(connection)
 		connection.Write([]byte("ok"))
-		if data.Create {
-			createTransaction(data)
-		} else {
+		if data.Action == 0 {
 			fmt.Print("Rate: " + strconv.Itoa(vote(data, strings.Split(connection.RemoteAddr().String(), ":")[0])) + "\n")
+		} else if data.Action == 1 {
+			createTransaction(data)
+		} else if data.Action == 2 {
+			fake(data)
+		} else if data.Action == 3 {
+			list()
 		}
 		connection.Close()
 	}
@@ -234,6 +238,29 @@ func blobExists(transactionId int) bool {
 	return false
 }
 
+func list() {
+	pager := azureClient.NewListBlobsFlatPager(containerName, nil)
+	for pager.More() {
+		resp, err := pager.NextPage(context.TODO())
+		handleError(err)
+		for _, v := range resp.Segment.BlobItems {
+			id, _ := strconv.Atoi(*v.Name)
+			transaction := downloadBlob(id)
+			data := strconv.Itoa(transaction.id) + ";" + transaction.sender + ";" + transaction.receiver + ";" + fmt.Sprintf("%f", transaction.amount)
+			fmt.Println("Transaction " + strconv.Itoa(id) + ": " + data)
+		}
+	}
+}
+
+func fake(data Data) {
+	transaction := parseTransaction(data)
+	if blobExists(transaction.id) {
+		transaction := downloadBlob(transaction.id)
+		transaction.amount = 20
+		uploadBlob(transaction)
+	}
+}
+
 func handleError(err error) {
 	if err != nil {
 		log.Fatal(err.Error())
diff --git a/server/yaml/neighbour-1.yaml b/server/yaml/neighbour-1.yaml
index b610f85..2afde8f 100644
--- a/server/yaml/neighbour-1.yaml
+++ b/server/yaml/neighbour-1.yaml
@@ -4,5 +4,5 @@ neighbours:
   - id: 2
     address: "20.216.148.5"
   
-  - id: 3
-    address: "20.123.192.218"
\ No newline at end of file
+  - id: 4
+    address: "20.224.123.38"
\ No newline at end of file
diff --git a/server/yaml/neighbour-3.yaml b/server/yaml/neighbour-3.yaml
index e4a6015..4769d71 100644
--- a/server/yaml/neighbour-3.yaml
+++ b/server/yaml/neighbour-3.yaml
@@ -4,5 +4,5 @@ neighbours:
   - id: 2
     address: "20.216.148.5"
   
-  - id: 1
-    address: "4.233.112.40"
\ No newline at end of file
+  - id: 6
+    address: "20.203.221.39"
\ No newline at end of file
-- 
GitLab