add generic ArrayIn function with minimal type casting (#411)
This commit is contained in:
parent
d56c19b2aa
commit
2cd4957472
4 changed files with 17 additions and 28 deletions
|
|
@ -12,7 +12,7 @@ import (
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
var mu = sync.Mutex{}
|
var mu sync.Mutex
|
||||||
|
|
||||||
func Read() string {
|
func Read() string {
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ func (manager *SessionManager) Clear() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *SessionManager) Broadcast(v interface{}, exclude interface{}) error {
|
func (manager *SessionManager) Broadcast(v interface{}, exclude []string) error {
|
||||||
manager.mu.Lock()
|
manager.mu.Lock()
|
||||||
defer manager.mu.Unlock()
|
defer manager.mu.Unlock()
|
||||||
|
|
||||||
|
|
@ -201,11 +201,9 @@ func (manager *SessionManager) Broadcast(v interface{}, exclude interface{}) err
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if exclude != nil {
|
|
||||||
if in, _ := utils.ArrayIn(id, exclude); in {
|
if in, _ := utils.ArrayIn(id, exclude); in {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if err := session.Send(v); err != nil {
|
if err := session.Send(v); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -215,7 +213,7 @@ func (manager *SessionManager) Broadcast(v interface{}, exclude interface{}) err
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *SessionManager) AdminBroadcast(v interface{}, exclude interface{}) error {
|
func (manager *SessionManager) AdminBroadcast(v interface{}, exclude []string) error {
|
||||||
manager.mu.Lock()
|
manager.mu.Lock()
|
||||||
defer manager.mu.Unlock()
|
defer manager.mu.Unlock()
|
||||||
|
|
||||||
|
|
@ -224,11 +222,9 @@ func (manager *SessionManager) AdminBroadcast(v interface{}, exclude interface{}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if exclude != nil {
|
|
||||||
if in, _ := utils.ArrayIn(id, exclude); in {
|
if in, _ := utils.ArrayIn(id, exclude); in {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if err := session.Send(v); err != nil {
|
if err := session.Send(v); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -241,3 +237,5 @@ func (manager *SessionManager) AdminBroadcast(v interface{}, exclude interface{}
|
||||||
func (manager *SessionManager) GetEventsChannel() chan types.SessionEvent {
|
func (manager *SessionManager) GetEventsChannel() chan types.SessionEvent {
|
||||||
return manager.eventsChannel
|
return manager.eventsChannel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ types.SessionManager = (*SessionManager)(nil)
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ type SessionManager interface {
|
||||||
Admins() []*Member
|
Admins() []*Member
|
||||||
Destroy(id string)
|
Destroy(id string)
|
||||||
Clear() error
|
Clear() error
|
||||||
Broadcast(v interface{}, exclude interface{}) error
|
Broadcast(v interface{}, exclude []string) error
|
||||||
AdminBroadcast(v interface{}, exclude interface{}) error
|
AdminBroadcast(v interface{}, exclude []string) error
|
||||||
GetEventsChannel() chan SessionEvent
|
GetEventsChannel() chan SessionEvent
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,15 @@
|
||||||
package utils
|
package utils
|
||||||
|
|
||||||
import (
|
func ArrayIn[T comparable](val T, array []T) (exists bool, index int) {
|
||||||
"reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
func ArrayIn(val interface{}, array interface{}) (exists bool, index int) {
|
|
||||||
exists = false
|
|
||||||
index = -1
|
index = -1
|
||||||
|
|
||||||
switch reflect.TypeOf(array).Kind() {
|
for i, v := range array {
|
||||||
case reflect.Slice:
|
if v == val {
|
||||||
s := reflect.ValueOf(array)
|
|
||||||
for i := 0; i < s.Len(); i++ {
|
|
||||||
if reflect.DeepEqual(val, s.Index(i).Interface()) {
|
|
||||||
index = i
|
index = i
|
||||||
exists = true
|
exists = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue