pztrn
e2a9298f85
Refactored the way URTrator working with profiles - now everything that could be taken from internal cache will be taken from cache. The very same as with servers. Moved all callbacks from callbacks to events, so we achieve full asynchronity here and can launch anything in goroutines :). Moved MainWindow-related game launching functions into another file (mainwindow_launch.go). Made quick connect widget working. Note, that even if you're on Favorites and trying to connect to one of favorited servers but with quick connect - you still have to choose right profile near Launch button! Maybe something else I forget.
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
// URTator - Urban Terror server browser and game launcher, written in
|
|
// Go.
|
|
//
|
|
// Copyright (c) 2016, Stanslav N. a.k.a pztrn (or p0z1tr0n)
|
|
// All rights reserved.
|
|
//
|
|
// Licensed under Terms and Conditions of GNU General Public License
|
|
// version 3 or any higher.
|
|
// ToDo: put full text of license here.
|
|
package eventer
|
|
|
|
import (
|
|
crand "crypto/rand"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
type Eventer struct {
|
|
// Events
|
|
events map[string]map[string]func(data map[string]string)
|
|
}
|
|
|
|
func (e *Eventer) AddEventHandler(event string, handler func(data map[string]string)) {
|
|
_, ok := e.events[event]
|
|
if !ok {
|
|
e.events[event] = make(map[string]func(data map[string]string))
|
|
}
|
|
event_id_raw := make([]byte, 16)
|
|
crand.Read(event_id_raw)
|
|
event_id := fmt.Sprintf("%x", event_id_raw)
|
|
e.events[event][event_id] = handler
|
|
}
|
|
|
|
func (e *Eventer) Initialize() {
|
|
e.initializeStorage()
|
|
}
|
|
|
|
func (e *Eventer) initializeStorage() {
|
|
e.events = make(map[string]map[string]func(data map[string]string))
|
|
}
|
|
|
|
func (e *Eventer) LaunchEvent(event string, data map[string]string) error {
|
|
_, ok := e.events[event]
|
|
if !ok {
|
|
return errors.New("Event " + event + " not found!")
|
|
}
|
|
fmt.Println("Launching event " + event)
|
|
|
|
for _, val := range e.events[event] {
|
|
val(data)
|
|
}
|
|
|
|
return nil
|
|
}
|