67 lines
1.3 KiB
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)
|
||
|
|
||
|
}
|