Add server logging
This commit is contained in:
parent
e94bbb8901
commit
ad9863d2c8
|
@ -2,7 +2,7 @@ package tcpserver
|
||||||
|
|
||||||
import "net"
|
import "net"
|
||||||
|
|
||||||
type ServerOption func(*ServerConfiguration)
|
type ServerOption func(conf *ServerConfiguration)
|
||||||
|
|
||||||
// WithMessageEndRune sets the MessageEndRune in the server configuration.
|
// WithMessageEndRune sets the MessageEndRune in the server configuration.
|
||||||
func WithMessageEndRune(r rune) ServerOption {
|
func WithMessageEndRune(r rune) ServerOption {
|
||||||
|
@ -31,3 +31,9 @@ func WithHandleClientFunc(handler func(client net.Conn)) ServerOption {
|
||||||
conf.HandleClientFunc = handler
|
conf.HandleClientFunc = handler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WithLoggingLevel(level ServerLoggingLevel) ServerOption {
|
||||||
|
return func(conf *ServerConfiguration) {
|
||||||
|
conf.LogLevel = level
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,10 +12,23 @@ import (
|
||||||
"git.qowevisa.me/Qowevisa/tcpmachine/tcpcommand"
|
"git.qowevisa.me/Qowevisa/tcpmachine/tcpcommand"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ServerLoggingLevel int
|
||||||
|
|
||||||
|
const (
|
||||||
|
LogLevel_Nothing = 0
|
||||||
|
LogLevel_Connection = 1 << iota
|
||||||
|
LogLevel_Messages
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
LogLevel_ALL = LogLevel_Connection | LogLevel_Messages
|
||||||
|
)
|
||||||
|
|
||||||
type ServerConfiguration struct {
|
type ServerConfiguration struct {
|
||||||
MessageEndRune rune
|
MessageEndRune rune
|
||||||
MessageSplitRune rune
|
MessageSplitRune rune
|
||||||
HandleClientFunc func(client net.Conn)
|
HandleClientFunc func(client net.Conn)
|
||||||
|
LogLevel ServerLoggingLevel
|
||||||
//
|
//
|
||||||
ErrorResolver func(chan error)
|
ErrorResolver func(chan error)
|
||||||
}
|
}
|
||||||
|
@ -54,6 +67,7 @@ type Server struct {
|
||||||
MessageSplitRune rune
|
MessageSplitRune rune
|
||||||
ErrorsChannel chan error
|
ErrorsChannel chan error
|
||||||
ErrorResolver func(chan error)
|
ErrorResolver func(chan error)
|
||||||
|
LogLevel ServerLoggingLevel
|
||||||
//
|
//
|
||||||
Commands []tcpcommand.Command
|
Commands []tcpcommand.Command
|
||||||
}
|
}
|
||||||
|
@ -73,6 +87,9 @@ func defaultHandleClientFunc(server *Server) func(net.Conn) {
|
||||||
msgWoNl := strings.Trim(msg, string(server.MessageEndRune))
|
msgWoNl := strings.Trim(msg, string(server.MessageEndRune))
|
||||||
parts := strings.Split(msgWoNl, string(server.MessageSplitRune))
|
parts := strings.Split(msgWoNl, string(server.MessageSplitRune))
|
||||||
commandFound := false
|
commandFound := false
|
||||||
|
if server.LogLevel&LogLevel_Messages > 0 {
|
||||||
|
log.Printf("Message received from %s : %s\n", client.RemoteAddr(), msgWoNl)
|
||||||
|
}
|
||||||
for _, cmd := range server.Commands {
|
for _, cmd := range server.Commands {
|
||||||
if cmd.Command == parts[0] {
|
if cmd.Command == parts[0] {
|
||||||
cmd.Action(parts[1:], client)
|
cmd.Action(parts[1:], client)
|
||||||
|
@ -87,7 +104,7 @@ func defaultHandleClientFunc(server *Server) func(net.Conn) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// HandleClientFunc is NOT created by this function
|
// NOTE: HandleClientFunc is NOT created by this function
|
||||||
// see: CreateHandleClientFuncFromCommands(bundle)
|
// see: CreateHandleClientFuncFromCommands(bundle)
|
||||||
func GetDefaultConfig() ServerConfiguration {
|
func GetDefaultConfig() ServerConfiguration {
|
||||||
return ServerConfiguration{
|
return ServerConfiguration{
|
||||||
|
@ -118,6 +135,7 @@ func CreateServer(addr string, options ...ServerOption) *Server {
|
||||||
MessageSplitRune: conf.MessageSplitRune,
|
MessageSplitRune: conf.MessageSplitRune,
|
||||||
ErrorsChannel: make(chan error, 8),
|
ErrorsChannel: make(chan error, 8),
|
||||||
ErrorResolver: conf.ErrorResolver,
|
ErrorResolver: conf.ErrorResolver,
|
||||||
|
LogLevel: conf.LogLevel,
|
||||||
//
|
//
|
||||||
Commands: cmds,
|
Commands: cmds,
|
||||||
}
|
}
|
||||||
|
@ -163,6 +181,9 @@ loop:
|
||||||
s.ErrorsChannel <- fmt.Errorf("listener.Accept: %w", err)
|
s.ErrorsChannel <- fmt.Errorf("listener.Accept: %w", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
if s.LogLevel&LogLevel_Connection > 0 {
|
||||||
|
fmt.Printf("New Connection from %s is accepted\n", newCLient.RemoteAddr())
|
||||||
|
}
|
||||||
go s.HandleClientFunc(newCLient)
|
go s.HandleClientFunc(newCLient)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -172,6 +193,12 @@ loop:
|
||||||
var commandDuplicateError = errors.New("Command already exists in server")
|
var commandDuplicateError = errors.New("Command already exists in server")
|
||||||
var commandNotHandledError = errors.New("Command was not handled")
|
var commandNotHandledError = errors.New("Command was not handled")
|
||||||
|
|
||||||
|
// On registers an action for a specific command. The action will be executed
|
||||||
|
// when the command is received from a client. For example, given the input
|
||||||
|
// string `TEST 1 2 3 4`, the command would be `TEST`, and the args would be
|
||||||
|
// []string{"1", "2", "3", "4"}.
|
||||||
|
//
|
||||||
|
// NOTE: This behavior applies only if `MessageSplitRune` is set to the default value (' ').
|
||||||
func (s *Server) On(command string, action func(args []string, client net.Conn)) error {
|
func (s *Server) On(command string, action func(args []string, client net.Conn)) error {
|
||||||
for _, cmd := range s.Commands {
|
for _, cmd := range s.Commands {
|
||||||
if cmd.Command == command {
|
if cmd.Command == command {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user