start minIO, refactored files into packages
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"math/rand/v2"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"go-socket/packages/Enums/ConnectionState"
|
||||
"go-socket/packages/Enums/WsEventType"
|
||||
"go-socket/packages/globals"
|
||||
|
||||
"github.com/coder/websocket"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type Rgba [4]uint8
|
||||
|
||||
func (r Rgba) GetRandom() *Rgba {
|
||||
for i := range r {
|
||||
r[i] = uint8(rand.IntN(256))
|
||||
}
|
||||
return &r
|
||||
}
|
||||
|
||||
type User struct {
|
||||
Mu sync.RWMutex
|
||||
Name string
|
||||
Pronouns string
|
||||
PasswordHash string
|
||||
CreatedAt time.Time
|
||||
WsConn *websocket.Conn
|
||||
Id uuid.UUID
|
||||
Connections map[uuid.UUID]*Connection
|
||||
Color *Rgba
|
||||
}
|
||||
|
||||
type Connection struct {
|
||||
Mu sync.RWMutex `json:"-"`
|
||||
Id uuid.UUID `json:"id"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
MessagesBuff [globals.MaxDirectMsgCache]*Message `json:"-"`
|
||||
NextBuffIdx uint32 `json:"-"`
|
||||
RequestorId uuid.UUID `json:"requestorId"`
|
||||
RecipientId uuid.UUID `json:"recipientId"`
|
||||
UserWantingToElevate uuid.UUID `json:"userWantingToElevate"` // TODO add to database
|
||||
HaveOverflowed bool `json:"-"`
|
||||
State ConnectionState.ConnectionState `json:"state"`
|
||||
}
|
||||
|
||||
func (conn *Connection) AddMessageToBuff(message *Message) {
|
||||
conn.Mu.Lock()
|
||||
defer conn.Mu.Unlock()
|
||||
|
||||
conn.MessagesBuff[conn.NextBuffIdx%globals.MaxDirectMsgCache] = message
|
||||
conn.NextBuffIdx++
|
||||
if conn.NextBuffIdx >= globals.MaxDirectMsgCache {
|
||||
conn.HaveOverflowed = true
|
||||
}
|
||||
}
|
||||
|
||||
// GetSortedMessagesBuff returns arr, length
|
||||
func (conn *Connection) GetSortedMessagesBuff() (*[globals.MaxDirectMsgCache]*Message, uint32) {
|
||||
conn.Mu.RLock()
|
||||
defer conn.Mu.RUnlock()
|
||||
|
||||
if !conn.HaveOverflowed {
|
||||
return &conn.MessagesBuff, conn.NextBuffIdx
|
||||
}
|
||||
|
||||
sorted := new([globals.MaxDirectMsgCache]*Message)
|
||||
for i := uint32(0); i < globals.MaxDirectMsgCache; i++ {
|
||||
sorted[i] = conn.MessagesBuff[(conn.NextBuffIdx+i)%globals.MaxDirectMsgCache]
|
||||
}
|
||||
return sorted, globals.MaxDirectMsgCache
|
||||
}
|
||||
|
||||
type ConnectionElevationData struct {
|
||||
Id uuid.UUID `json:"id"`
|
||||
NewState ConnectionState.ConnectionState `json:"newState"`
|
||||
}
|
||||
|
||||
type Message struct {
|
||||
Id uuid.UUID `json:"id"`
|
||||
AttachedMedia string `json:"attachedMedia"`
|
||||
Content string `json:"content"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
Sender uuid.UUID `json:"sender"`
|
||||
Receiver uuid.UUID `json:"receiver"`
|
||||
}
|
||||
|
||||
type LoginReturn struct {
|
||||
Token string `json:"token"`
|
||||
UserId uuid.UUID `json:"userId"`
|
||||
}
|
||||
|
||||
type WsEventMessage struct {
|
||||
Type WsEventType.WsEventType `json:"types"`
|
||||
Event any `json:"event"`
|
||||
}
|
||||
|
||||
type WsAuthMessage struct {
|
||||
Success bool `json:"success"`
|
||||
Error string `json:"error"`
|
||||
}
|
||||
Reference in New Issue
Block a user