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) }