Added arn to the main repository
This commit is contained in:
46
arn/UserEvents.go
Normal file
46
arn/UserEvents.go
Normal file
@ -0,0 +1,46 @@
|
||||
package arn
|
||||
|
||||
import "github.com/aerogo/aero"
|
||||
|
||||
// // EventStreams returns the user's active event streams.
|
||||
// func (user *User) EventStreams() []*aero.EventStream {
|
||||
// return user.eventStreams
|
||||
// }
|
||||
|
||||
// AddEventStream adds an event stream to the given user.
|
||||
func (user *User) AddEventStream(stream *aero.EventStream) {
|
||||
user.eventStreams.Lock()
|
||||
defer user.eventStreams.Unlock()
|
||||
|
||||
user.eventStreams.value = append(user.eventStreams.value, stream)
|
||||
}
|
||||
|
||||
// RemoveEventStream removes an event stream from the given user
|
||||
// and returns true if it was removed, otherwise false.
|
||||
func (user *User) RemoveEventStream(stream *aero.EventStream) bool {
|
||||
user.eventStreams.Lock()
|
||||
defer user.eventStreams.Unlock()
|
||||
|
||||
for index, element := range user.eventStreams.value {
|
||||
if element == stream {
|
||||
user.eventStreams.value = append(user.eventStreams.value[:index], user.eventStreams.value[index+1:]...)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// BroadcastEvent sends the given event to all event streams for the given user.
|
||||
func (user *User) BroadcastEvent(event *aero.Event) {
|
||||
user.eventStreams.Lock()
|
||||
defer user.eventStreams.Unlock()
|
||||
|
||||
for _, stream := range user.eventStreams.value {
|
||||
// Non-blocking send because we don't know if our listeners are still active.
|
||||
select {
|
||||
case stream.Events <- event:
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user