Skip to content
Snippets Groups Projects
Select Git revision
  • 65f0418c0a7333eaec4aee33cc51a4030e98e3a2
  • master default protected
2 results

cours_11.md

Blame
  • Forked from algorithmique / cours
    Source project has a limited visibility.
    client.go 1.53 KiB
    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	types "local/helper"
    	"net"
    	"os"
    	"strconv"
    )
    
    const (
    	ServerPort = "8017"
    	ServerType = "tcp"
    )
    
    func main() {
    	args := os.Args
    	if len(args) < 3 {
    		fmt.Printf("Usage: %s <server> <action>", args[0])
    		os.Exit(1)
    	}
    
    	serverHost := args[1]
    	action, _ := strconv.Atoi(args[2])
    	var id int
    	var from string
    	var to string
    	var amount int
    	var m types.Message
    
    	switch action {
    	case types.MCreateTransaction:
    		if len(args) != 7 {
    			fmt.Printf("Usage: %s %s %d <id> <from> <to> <amount>\n", args[0], serverHost, action)
    			os.Exit(1)
    		}
    		id, _ = strconv.Atoi(args[3])
    		from = args[4]
    		to = args[5]
    		amount, _ = strconv.Atoi(args[6])
    
    		t := types.Transaction{
    			Id:     id,
    			From:   from,
    			To:     to,
    			Amount: amount,
    		}
    		m = types.Message{
    			Action:      types.MCreateTransaction,
    			Transaction: t,
    			Proactive:   serverHost,
    		}
    		sendMessage(serverHost, m)
    		break
    	case types.MListTransactions:
    		m = types.Message{
    			Action:    types.MListTransactions,
    			Proactive: serverHost,
    		}
    		sendMessage(serverHost, m)
    		break
    	default:
    		break
    	}
    }
    
    func sendMessage(serverHost string, message types.Message) {
    
    	data, err := json.Marshal(message)
    	if err != nil {
    		panic(err)
    	}
    	connection, err := net.Dial(ServerType, serverHost+":"+ServerPort)
    	if err != nil {
    		panic(err)
    	}
    	_, err = connection.Write(data)
    	buffer := make([]byte, 2048)
    
    	mLen, err := connection.Read(buffer)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println("Received: ", string(buffer[:mLen]))
    	defer connection.Close()
    }