mirror of
https://github.com/m1k1o/neko.git
synced 2026-11-03 00:11:48 -06:00
add generic ArrayIn function with minimal type casting (#411)
This commit is contained in:
@@ -12,7 +12,7 @@ import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
var mu = sync.Mutex{}
|
||||
var mu sync.Mutex
|
||||
|
||||
func Read() string {
|
||||
mu.Lock()
|
||||
|
||||
@@ -192,7 +192,7 @@ func (manager *SessionManager) Clear() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SessionManager) Broadcast(v interface{}, exclude interface{}) error {
|
||||
func (manager *SessionManager) Broadcast(v interface{}, exclude []string) error {
|
||||
manager.mu.Lock()
|
||||
defer manager.mu.Unlock()
|
||||
|
||||
@@ -201,10 +201,8 @@ func (manager *SessionManager) Broadcast(v interface{}, exclude interface{}) err
|
||||
continue
|
||||
}
|
||||
|
||||
if exclude != nil {
|
||||
if in, _ := utils.ArrayIn(id, exclude); in {
|
||||
continue
|
||||
}
|
||||
if in, _ := utils.ArrayIn(id, exclude); in {
|
||||
continue
|
||||
}
|
||||
|
||||
if err := session.Send(v); err != nil {
|
||||
@@ -215,7 +213,7 @@ func (manager *SessionManager) Broadcast(v interface{}, exclude interface{}) err
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SessionManager) AdminBroadcast(v interface{}, exclude interface{}) error {
|
||||
func (manager *SessionManager) AdminBroadcast(v interface{}, exclude []string) error {
|
||||
manager.mu.Lock()
|
||||
defer manager.mu.Unlock()
|
||||
|
||||
@@ -224,10 +222,8 @@ func (manager *SessionManager) AdminBroadcast(v interface{}, exclude interface{}
|
||||
continue
|
||||
}
|
||||
|
||||
if exclude != nil {
|
||||
if in, _ := utils.ArrayIn(id, exclude); in {
|
||||
continue
|
||||
}
|
||||
if in, _ := utils.ArrayIn(id, exclude); in {
|
||||
continue
|
||||
}
|
||||
|
||||
if err := session.Send(v); err != nil {
|
||||
@@ -241,3 +237,5 @@ func (manager *SessionManager) AdminBroadcast(v interface{}, exclude interface{}
|
||||
func (manager *SessionManager) GetEventsChannel() chan types.SessionEvent {
|
||||
return manager.eventsChannel
|
||||
}
|
||||
|
||||
var _ types.SessionManager = (*SessionManager)(nil)
|
||||
|
||||
@@ -61,7 +61,7 @@ type SessionManager interface {
|
||||
Admins() []*Member
|
||||
Destroy(id string)
|
||||
Clear() error
|
||||
Broadcast(v interface{}, exclude interface{}) error
|
||||
AdminBroadcast(v interface{}, exclude interface{}) error
|
||||
Broadcast(v interface{}, exclude []string) error
|
||||
AdminBroadcast(v interface{}, exclude []string) error
|
||||
GetEventsChannel() chan SessionEvent
|
||||
}
|
||||
|
||||
@@ -1,22 +1,13 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
)
|
||||
|
||||
func ArrayIn(val interface{}, array interface{}) (exists bool, index int) {
|
||||
exists = false
|
||||
func ArrayIn[T comparable](val T, array []T) (exists bool, index int) {
|
||||
index = -1
|
||||
|
||||
switch reflect.TypeOf(array).Kind() {
|
||||
case reflect.Slice:
|
||||
s := reflect.ValueOf(array)
|
||||
for i := 0; i < s.Len(); i++ {
|
||||
if reflect.DeepEqual(val, s.Index(i).Interface()) {
|
||||
index = i
|
||||
exists = true
|
||||
return
|
||||
}
|
||||
for i, v := range array {
|
||||
if v == val {
|
||||
index = i
|
||||
exists = true
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user