64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package server
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"github.com/mitchellh/colorstring"
 | 
						|
)
 | 
						|
 | 
						|
type EventListeners map[string][]EventListenerFunction
 | 
						|
 | 
						|
type EventListenerFunction *func(string)
 | 
						|
 | 
						|
// Defines all of the possible output events for a server.
 | 
						|
// noinspection GoNameStartsWithPackageName
 | 
						|
const (
 | 
						|
	ConsoleOutputEvent = "console output"
 | 
						|
	StatusEvent        = "status"
 | 
						|
	StatsEvent         = "stats"
 | 
						|
)
 | 
						|
 | 
						|
// Adds an event listener for the server instance.
 | 
						|
func (s *Server) AddListener(event string, f EventListenerFunction) {
 | 
						|
	if s.listeners == nil {
 | 
						|
		s.listeners = make(map[string][]EventListenerFunction)
 | 
						|
	}
 | 
						|
 | 
						|
	if _, ok := s.listeners[event]; ok {
 | 
						|
		s.listeners[event] = append(s.listeners[event], f)
 | 
						|
	} else {
 | 
						|
		s.listeners[event] = []EventListenerFunction{f}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Removes the event listener for the server instance.
 | 
						|
func (s *Server) RemoveListener(event string, f EventListenerFunction) {
 | 
						|
	if _, ok := s.listeners[event]; ok {
 | 
						|
		for i := range s.listeners[event] {
 | 
						|
			if s.listeners[event][i] == f {
 | 
						|
				s.listeners[event] = append(s.listeners[event][:i], s.listeners[event][i+1:]...)
 | 
						|
				break
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Emits an event to all of the active listeners for a server.
 | 
						|
func (s *Server) Emit(event string, data string) {
 | 
						|
	if _, ok := s.listeners[event]; ok {
 | 
						|
		for _, handler := range s.listeners[event] {
 | 
						|
			go func(f EventListenerFunction, d string) {
 | 
						|
				(*f)(d)
 | 
						|
			}(handler, data)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Sends output to the server console formatted to appear correctly as being sent
 | 
						|
// from Wings.
 | 
						|
func (s *Server) SendConsoleOutputFromDaemon(data string) {
 | 
						|
	s.Emit(
 | 
						|
		ConsoleOutputEvent,
 | 
						|
		colorstring.Color(fmt.Sprintf("[yellow][bold][Pterodactyl Daemon]:[default] %s", data)),
 | 
						|
	)
 | 
						|
}
 |