Select Git revision
parser.go 4.86 KiB
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"strconv"
"strings"
"gopkg.in/yaml.v2"
)
type Transaction struct {
ID int `json:"ID"`
Sender string `json:"sender"`
Receiver string `json:"receiver"`
Amount int `json:"amount"`
IsFake bool `json:"isFake"`
}
type Node struct {
ID int `yaml:"id"`
Address string `yaml:"address"`
Neighbours []Neighbours `yaml:"neighbours"`
}
type Neighbours struct {
ID int `yaml:"id"`
Address string `yaml:"address"`
}
func ListOfTransactions() {
// Open our jsonFile
jsonFile, err := os.Open("node1.json")
// if we os.Open returns an error then handle it
if err != nil {
fmt.Println(err)
}
fmt.Println("Successfully Opened node1.json")
// read our opened jsonFile as a byte array.
byteValue, _ := ioutil.ReadAll(jsonFile)
var transactions []Transaction
// we unmarshal our byteArray which contains our
// jsonFile's content into 'transaction' which we defined above
json.Unmarshal(byteValue, &transactions)
for i := 0; i < len(transactions); i++ {
fmt.Println("ID:" + strconv.Itoa(transactions[i].ID))
fmt.Println("Sender: " + transactions[i].Sender)
fmt.Println("Receiver: " + transactions[i].Receiver)
fmt.Println("Amount: " + strconv.Itoa(transactions[i].Amount))
fmt.Println("isFake: " + strconv.FormatBool(transactions[i].IsFake))
}
// defer the closing of our jsonFile so that we can parse it later on
defer jsonFile.Close()
}
func AppendData(newTrans Transaction, filename string) {
jsonFile, err := os.Open(filename)
if err != nil {
fmt.Println(err)
}
file, _ := ioutil.ReadAll(jsonFile)
data := []Transaction{}
json.Unmarshal(file, &data)
data = append(data, newTrans)
dataBytes, _ := json.MarshalIndent(data, "", " ")
_ = ioutil.WriteFile(filename, dataBytes, 0666)
}
func Fake(fakeID int, fakeTrans Transaction) {
jsonFile, err := os.Open("node1.json")
if err != nil {
fmt.Println(err)
}
byteValue, _ := ioutil.ReadAll(jsonFile)
var transactions []Transaction
json.Unmarshal(byteValue, &transactions)
for i := 0; i < len(transactions); i++ {
print(transactions[i].ID)
if transactions[i].ID == fakeID {
transactions[i] = fakeTrans
}
}
dataBytes, _ := json.MarshalIndent(transactions, "", " ")
_ = ioutil.WriteFile("node1.json", dataBytes, 0666)
}
func ReadYAML(filename string) Node {
file, err := ioutil.ReadFile(filename)
if err != nil {
panic(err)
}
var yamlData Node
err = yaml.Unmarshal(file, &yamlData)
if err != nil {
panic(err)
}
return yamlData
}
func TrimLeftChar(s string) string {
for i := range s {
if i > 0 {
return s[i:]
}
}
return s[:0]
}
func TradeFromString(message string, filename string) {
tablMessage := strings.Split(message, " ")
if tablMessage[4][len(tablMessage[4])-1] == '\n' {
tablMessage[4] = tablMessage[4][:len(tablMessage[4])-1]
}
id, _ := strconv.ParseInt(tablMessage[0], 10, 32)
amount, _ := strconv.ParseInt(tablMessage[3], 10, 32)
isFake, _ := strconv.ParseBool(tablMessage[4])
newTrans := &Transaction{
ID: int(id),
Sender: tablMessage[1],
Receiver: tablMessage[2],
Amount: int(amount),
IsFake: isFake,
}
print(isFake)
AppendData(*newTrans, filename)
}
func removePortInString(address string) string {
for i := 0; i < len(address); i++ {
if address[i] == ':' {
address = address[:i]
break
}
}
return address
}
func checkTrade(message string, filename string) int {
tablMessage := strings.Split(message, " ")
if tablMessage[4][len(tablMessage[4])-1] == '\n' {
tablMessage[4] = tablMessage[4][:len(tablMessage[4])-1]
}
id, _ := strconv.ParseInt(tablMessage[0], 10, 32)
amount, _ := strconv.ParseInt(tablMessage[3], 10, 32)
isFake, err := strconv.ParseBool(tablMessage[4])
if err != nil {
fmt.Println(err)
}
newTrans := &Transaction{
ID: int(id),
Sender: tablMessage[1],
Receiver: tablMessage[2],
Amount: int(amount),
IsFake: isFake,
}
jsonFile, err := os.Open(filename)
if err != nil {
fmt.Println(err)
}
byteValue, _ := ioutil.ReadAll(jsonFile)
var transactions []Transaction
json.Unmarshal(byteValue, &transactions)
for i := 0; i < len(transactions); i++ {
if transAreEqual(transactions[i], *newTrans) {
return 1
}
}
return 0
}
func getNbrOfTrade(message string) int {
if message[len(message)-1] == '\n' {
message = message[:len(message)-1]
}
tablMessage := strings.Split(message, " ")
if len(tablMessage) == 6 {
nbrTrade, err := strconv.ParseInt(tablMessage[5], 10, 32)
if err != nil {
fmt.Println(err)
}
return int(nbrTrade)
}
return 0
}
func transAreEqual(trans1 Transaction, trans2 Transaction) bool {
if trans1.ID != trans2.ID {
return false
}
if trans1.Sender != trans2.Sender {
return false
}
if trans1.Receiver != trans2.Receiver {
return false
}
if trans1.Amount != trans2.Amount {
return false
}
if trans1.IsFake != trans2.IsFake {
return false
}
return true
}