public function fireEvent($event, $parameters)
    {
        if (empty($event)) {
            throw new \Exception("Event is not specified!");
        }
        
        if (!empty(self::$suspended_events[$event])) {
            return true;
        }
        
        if (empty(self::$event_table[$event])) {
            return true;
        }
        
        $cnt = 0;
        
        try {
            foreach (self::$event_table[$event] as $f) {
                $cnt++;
                $f->invoke($event, $parameters);
            }
        } catch (\Exception $ex) {
            throw new \Exception($ex->getMessage());
        }
        
        return $cnt;
    }