Przeglądaj źródła

Added a rudimentary client.

Sacha Ligthert 1 rok temu
rodzic
commit
e7e8953ec3
5 zmienionych plików z 80 dodań i 8 usunięć
  1. 72 0
      client/Start.go
  2. 2 2
      client/types.go
  3. 3 1
      main.go
  4. 2 4
      server/Start.go
  5. 1 1
      vars/types.go

+ 72 - 0
client/Start.go

@@ -0,0 +1,72 @@
+package client
+
+import (
+	"log"
+	"net/url"
+	"os"
+	"os/signal"
+	"strconv"
+	"time"
+
+	"github.com/gorilla/websocket"
+)
+
+func (client *Client) Start() {
+	interrupt := make(chan os.Signal, 1)
+	signal.Notify(interrupt, os.Interrupt)
+
+	u := url.URL{Scheme: "ws", Host: client.ServerAddress + ":" + strconv.Itoa(client.ServerPort), Path: "/ws"}
+	log.Printf("connecting to %s", u.String())
+
+	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
+	if err != nil {
+		log.Fatal("dial:", err)
+	}
+	defer c.Close()
+
+	done := make(chan struct{})
+
+	go func() {
+		defer close(done)
+		for {
+			_, message, err := c.ReadMessage()
+			if err != nil {
+				log.Println("read:", err)
+				return
+			}
+			log.Printf("recv: %s", message)
+		}
+	}()
+
+	ticker := time.NewTicker(time.Second)
+	defer ticker.Stop()
+
+	for {
+		select {
+		case <-done:
+			return
+		case t := <-ticker.C:
+			err := c.WriteMessage(websocket.TextMessage, []byte(t.String()))
+			if err != nil {
+				log.Println("write:", err)
+				return
+			}
+		case <-interrupt:
+			log.Println("interrupt")
+
+			// Cleanly close the connection by sending a close message and then
+			// waiting (with timeout) for the server to close the connection.
+			err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
+			if err != nil {
+				log.Println("write close:", err)
+				return
+			}
+			select {
+			case <-done:
+			case <-time.After(time.Second):
+			}
+			return
+		}
+	}
+
+}

+ 2 - 2
client/types.go

@@ -1,6 +1,6 @@
 package client
 
 type Client struct {
-	serverAddress string
-	serverPort    int
+	ServerAddress string
+	ServerPort    int
 }

+ 3 - 1
main.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"os"
 
+	"gitea.ligthert.net/golang/sfcs/client"
 	"gitea.ligthert.net/golang/sfcs/flags"
 	"gitea.ligthert.net/golang/sfcs/server"
 	"gitea.ligthert.net/golang/sfcs/vars"
@@ -28,7 +29,8 @@ func main() {
 		server := server.Server{ListenAddress: vars.Address, ListenPort: vars.Port}
 		vars.Operator = &server
 	case "agent":
-		// operator := client.Client{}
+		client := client.Client{ServerAddress: vars.Address, ServerPort: vars.Port}
+		vars.Operator = &client
 	}
 
 	vars.Operator.Start()

+ 2 - 4
server/Start.go

@@ -9,16 +9,14 @@ import (
 	"github.com/gorilla/websocket"
 )
 
-func (server *Server) Start() error {
+func (server *Server) Start() {
 	// Start the server
 	http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
 		handleConnections(w, r)
 	})
 	log.Fatal(http.ListenAndServe(server.ListenAddress+":"+strconv.Itoa(server.ListenPort), nil))
 
-	time.Sleep(600 * time.Second)
-
-	return nil
+	// return nil
 }
 
 var upgrader = websocket.Upgrader{

+ 1 - 1
vars/types.go

@@ -4,7 +4,7 @@ import "gitea.ligthert.net/golang/sudoku-funpark/outputter"
 
 type Operator interface {
 	// Start the operator
-	Start() error
+	Start()
 }
 
 type Vars struct {