mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
Inactive cursors - multiple positions.
This commit is contained in:
parent
8dbe0d1d2d
commit
097e8d2a87
@ -19,7 +19,7 @@ func New(config *config.Session) *SessionManagerCtx {
|
||||
config: config,
|
||||
tokens: make(map[string]string),
|
||||
sessions: make(map[string]*SessionCtx),
|
||||
cursors: make(map[types.Session]types.Cursor),
|
||||
cursors: make(map[types.Session][]types.Cursor),
|
||||
emmiter: events.New(),
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ type SessionManagerCtx struct {
|
||||
host types.Session
|
||||
hostMu sync.Mutex
|
||||
|
||||
cursors map[types.Session]types.Cursor
|
||||
cursors map[types.Session][]types.Cursor
|
||||
cursorsMu sync.Mutex
|
||||
|
||||
emmiter events.EventEmmiter
|
||||
@ -205,15 +205,21 @@ func (manager *SessionManagerCtx) SetCursor(cursor types.Cursor, session types.S
|
||||
manager.cursorsMu.Lock()
|
||||
defer manager.cursorsMu.Unlock()
|
||||
|
||||
manager.cursors[session] = cursor
|
||||
list, ok := manager.cursors[session]
|
||||
if !ok {
|
||||
list = []types.Cursor{}
|
||||
}
|
||||
|
||||
list = append(list, cursor)
|
||||
manager.cursors[session] = list
|
||||
}
|
||||
|
||||
func (manager *SessionManagerCtx) PopCursors() map[types.Session]types.Cursor {
|
||||
func (manager *SessionManagerCtx) PopCursors() map[types.Session][]types.Cursor {
|
||||
manager.cursorsMu.Lock()
|
||||
defer manager.cursorsMu.Unlock()
|
||||
|
||||
cursors := manager.cursors
|
||||
manager.cursors = make(map[types.Session]types.Cursor)
|
||||
manager.cursors = make(map[types.Session][]types.Cursor)
|
||||
|
||||
return cursors
|
||||
}
|
||||
|
@ -88,10 +88,9 @@ type SessionData struct {
|
||||
State types.SessionState `json:"state"`
|
||||
}
|
||||
|
||||
type SessionCursor struct {
|
||||
type SessionCursors struct {
|
||||
ID string `json:"id"`
|
||||
X uint16 `json:"x"`
|
||||
Y uint16 `json:"y"`
|
||||
Cursors []types.Cursor `json:"cursors"`
|
||||
}
|
||||
|
||||
/////////////////////////////
|
||||
|
@ -13,8 +13,8 @@ var (
|
||||
)
|
||||
|
||||
type Cursor struct {
|
||||
X int
|
||||
Y int
|
||||
X int `json:"x"`
|
||||
Y int `json:"y"`
|
||||
}
|
||||
|
||||
type SessionState struct {
|
||||
@ -56,7 +56,7 @@ type SessionManager interface {
|
||||
ClearHost()
|
||||
|
||||
SetCursor(cursor Cursor, session Session)
|
||||
PopCursors() map[Session]Cursor
|
||||
PopCursors() map[Session][]Cursor
|
||||
|
||||
Broadcast(event string, payload interface{}, exclude interface{})
|
||||
AdminBroadcast(event string, payload interface{}, exclude interface{})
|
||||
|
@ -21,7 +21,7 @@ import (
|
||||
const pingPeriod = 10 * time.Second
|
||||
|
||||
// period for sending inactive cursor messages
|
||||
const inactiveCursorsPeriod = 500 * time.Millisecond
|
||||
const inactiveCursorsPeriod = 750 * time.Millisecond
|
||||
|
||||
func New(
|
||||
sessions types.SessionManager,
|
||||
@ -326,19 +326,18 @@ func (manager *WebSocketManagerCtx) inactiveCursors() {
|
||||
}
|
||||
lastEmpty = currentEmpty
|
||||
|
||||
cursors := []message.SessionCursor{}
|
||||
for session, cursor := range cursorsMap {
|
||||
cursors = append(
|
||||
cursors,
|
||||
message.SessionCursor{
|
||||
sessionCursors := []message.SessionCursors{}
|
||||
for session, cursors := range cursorsMap {
|
||||
sessionCursors = append(
|
||||
sessionCursors,
|
||||
message.SessionCursors{
|
||||
ID: session.ID(),
|
||||
X: uint16(cursor.X),
|
||||
Y: uint16(cursor.Y),
|
||||
Cursors: cursors,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
manager.sessions.InactiveCursorsBroadcast(event.SESSION_CURSORS, cursors, nil)
|
||||
manager.sessions.InactiveCursorsBroadcast(event.SESSION_CURSORS, sessionCursors, nil)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
Loading…
Reference in New Issue
Block a user