sfcs/server/handleConnections.go

67 lines
1.3 KiB
Go

package server
import (
"log"
"net/http"
"strconv"
"strings"
"time"
)
// Handle incoming websocket connections
func (server *Server) handleConnections(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return
}
// defer conn.Close()
log.Println("Incoming connection")
// Check for register
var registered bool
var msgs []string
for !registered {
_, message, err := conn.ReadMessage()
if err != nil {
log.Println("Error reading message:", err)
break
}
msgs = server.parseMessage(message)
if string(msgs[0]) == "register" {
registered = true
}
}
log.Println("Connected to agent")
// Create var of type Agent
cores_int, err := strconv.Atoi(msgs[2])
if err != nil {
log.Fatal("ERROR: failed strconv.Atoi(cpu cores):", err)
}
mem_max_string := strings.ReplaceAll(msgs[3], "GB", "")
mem_max_float, err := strconv.ParseFloat(mem_max_string, 64)
if err != nil {
log.Fatal("ERROR: failed strconv.ParseFloat():", err)
}
agent := Agent{
Name: msgs[1],
Reg: time.Now(),
Cores: cores_int,
Mem_max: mem_max_float,
TaskId: 0,
conn: conn,
}
// Dump it into server.Agents
server.Agents[msgs[1]] = &agent
defer server.closeConnection(msgs[1])
go server.readMessages(agent)
server.writeMessages(conn)
}