This repository has been archived on 2022-06-29. You can view files and clone it, but cannot push or open issues or pull requests.
urtrator/eventer/eventer_object.go
Stanislav N. aka pztrn 7f80f99529 GTK actions fix WIP and icon size fix.
Again, possibly fixed GTK actions calls from other goroutines
by wrapping events calls in glib.IdleAdd(). This should prevent
executing more than one event simultaneously, which will also
prevent crashes.

Fixed icons sizing for couple of icons.
2016-11-04 18:28:52 +05:00

67 lines
1.6 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"
//"reflect"
// github
"github.com/mattn/go-gtk/glib"
)
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)
glib.IdleAdd(func() bool {
e.reallyLaunchEvent(event, data)
return false
})
return nil
}
func (e *Eventer) reallyLaunchEvent(event string, data map[string]string) {
fmt.Println("Really launching event " + event + "...")
for _, val := range e.events[event] {
val(data)
}
}