summaryrefslogtreecommitdiff
path: root/back/Socket/Pool.go
blob: f3d468761b4406420b671ece6ab69b42b1994e5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package socket

import (
	"encoding/base64"
	"crypto/rand"

	"golang.org/x/net/websocket"
)

type Connection struct {
	UUID string
	WS *websocket.Conn
}

var connPool map[string]*Connection

func generateSecureString(length int) (string, error) {
	// Calculate required byte length to yield the requested string length after Base64 encoding
	byteLength := (length * 3) / 4
	if (length * 3) % 4 != 0 {
		byteLength++
	}

	bytes := make([]byte, byteLength)
	if _, err := rand.Read(bytes); err != nil {
		return "", err
	}

	// Encode to string and trim to exact requested length
	encoded := base64.URLEncoding.EncodeToString(bytes)
	return encoded[:length], nil
}

func Init() {
	connPool = make(map[string]*Connection)
}


func (self *Connection) Register() error {
	var nameExists = true
	var new_id string
	for nameExists {
		new_id, err := generateSecureString(8)
		if err != nil {
			return err
		}
		_, nameExists = connPool[new_id]
	}
	self.UUID = new_id
	connPool[new_id] = self
	return nil
}

func RemoveFromPool(name string) {
	var _, exists = connPool[name]
	if (!exists) {
		return
	}
	delete(connPool, name)
}