mirror of
https://github.com/ergochat/ergo.git
synced 2024-12-22 18:52:41 +01:00
get rid of editableCommand
This commit is contained in:
parent
d1a299792e
commit
77d053ccac
@ -18,7 +18,7 @@ type Client struct {
|
|||||||
capabilities CapabilitySet
|
capabilities CapabilitySet
|
||||||
capState CapState
|
capState CapState
|
||||||
channels ChannelSet
|
channels ChannelSet
|
||||||
commands chan editableCommand
|
commands chan Command
|
||||||
ctime time.Time
|
ctime time.Time
|
||||||
flags map[UserMode]bool
|
flags map[UserMode]bool
|
||||||
hasQuit bool
|
hasQuit bool
|
||||||
@ -43,7 +43,7 @@ func NewClient(server *Server, conn net.Conn) *Client {
|
|||||||
capState: CapNone,
|
capState: CapNone,
|
||||||
capabilities: make(CapabilitySet),
|
capabilities: make(CapabilitySet),
|
||||||
channels: make(ChannelSet),
|
channels: make(ChannelSet),
|
||||||
commands: make(chan editableCommand),
|
commands: make(chan Command),
|
||||||
ctime: now,
|
ctime: now,
|
||||||
flags: make(map[UserMode]bool),
|
flags: make(map[UserMode]bool),
|
||||||
phase: Registration,
|
phase: Registration,
|
||||||
|
@ -9,18 +9,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type editableCommand interface {
|
|
||||||
Command
|
|
||||||
SetCode(StringCode)
|
|
||||||
SetClient(*Client)
|
|
||||||
}
|
|
||||||
|
|
||||||
type checkPasswordCommand interface {
|
type checkPasswordCommand interface {
|
||||||
LoadPassword(*Server)
|
LoadPassword(*Server)
|
||||||
CheckPassword()
|
CheckPassword()
|
||||||
}
|
}
|
||||||
|
|
||||||
type parseCommandFunc func([]string) (editableCommand, error)
|
type parseCommandFunc func([]string) (Command, error)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
NotEnoughArgsError = errors.New("not enough arguments")
|
NotEnoughArgsError = errors.New("not enough arguments")
|
||||||
@ -79,7 +73,7 @@ func (command *BaseCommand) SetCode(code StringCode) {
|
|||||||
command.code = code
|
command.code = code
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseCommand(line string) (cmd editableCommand, err error) {
|
func ParseCommand(line string) (cmd Command, err error) {
|
||||||
code, args := ParseLine(line)
|
code, args := ParseLine(line)
|
||||||
constructor := parseCommandFuncs[code]
|
constructor := parseCommandFuncs[code]
|
||||||
if constructor == nil {
|
if constructor == nil {
|
||||||
@ -155,7 +149,7 @@ func (cmd *PingCommand) String() string {
|
|||||||
return fmt.Sprintf("PING(server=%s, server2=%s)", cmd.server, cmd.server2)
|
return fmt.Sprintf("PING(server=%s, server2=%s)", cmd.server, cmd.server2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPingCommand(args []string) (editableCommand, error) {
|
func NewPingCommand(args []string) (Command, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -180,7 +174,7 @@ func (cmd *PongCommand) String() string {
|
|||||||
return fmt.Sprintf("PONG(server1=%s, server2=%s)", cmd.server1, cmd.server2)
|
return fmt.Sprintf("PONG(server1=%s, server2=%s)", cmd.server1, cmd.server2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPongCommand(args []string) (editableCommand, error) {
|
func NewPongCommand(args []string) (Command, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -217,7 +211,7 @@ func (cmd *PassCommand) CheckPassword() {
|
|||||||
cmd.err = ComparePassword(cmd.hash, cmd.password)
|
cmd.err = ComparePassword(cmd.hash, cmd.password)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPassCommand(args []string) (editableCommand, error) {
|
func NewPassCommand(args []string) (Command, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -237,7 +231,7 @@ func (m *NickCommand) String() string {
|
|||||||
return fmt.Sprintf("NICK(nickname=%s)", m.nickname)
|
return fmt.Sprintf("NICK(nickname=%s)", m.nickname)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNickCommand(args []string) (editableCommand, error) {
|
func NewNickCommand(args []string) (Command, error) {
|
||||||
if len(args) != 1 {
|
if len(args) != 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -287,7 +281,7 @@ func (cmd *RFC2812UserCommand) Flags() []UserMode {
|
|||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserCommand(args []string) (editableCommand, error) {
|
func NewUserCommand(args []string) (Command, error) {
|
||||||
if len(args) != 4 {
|
if len(args) != 4 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -322,7 +316,7 @@ func (cmd *QuitCommand) String() string {
|
|||||||
return fmt.Sprintf("QUIT(message=%s)", cmd.message)
|
return fmt.Sprintf("QUIT(message=%s)", cmd.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewQuitCommand(args []string) (editableCommand, error) {
|
func NewQuitCommand(args []string) (Command, error) {
|
||||||
msg := &QuitCommand{}
|
msg := &QuitCommand{}
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
msg.message = args[0]
|
msg.message = args[0]
|
||||||
@ -342,7 +336,7 @@ func (cmd *JoinCommand) String() string {
|
|||||||
return fmt.Sprintf("JOIN(channels=%s, zero=%t)", cmd.channels, cmd.zero)
|
return fmt.Sprintf("JOIN(channels=%s, zero=%t)", cmd.channels, cmd.zero)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewJoinCommand(args []string) (editableCommand, error) {
|
func NewJoinCommand(args []string) (Command, error) {
|
||||||
msg := &JoinCommand{
|
msg := &JoinCommand{
|
||||||
channels: make(map[string]string),
|
channels: make(map[string]string),
|
||||||
}
|
}
|
||||||
@ -389,7 +383,7 @@ func (cmd *PartCommand) String() string {
|
|||||||
return fmt.Sprintf("PART(channels=%s, message=%s)", cmd.channels, cmd.message)
|
return fmt.Sprintf("PART(channels=%s, message=%s)", cmd.channels, cmd.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPartCommand(args []string) (editableCommand, error) {
|
func NewPartCommand(args []string) (Command, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -414,7 +408,7 @@ func (cmd *PrivMsgCommand) String() string {
|
|||||||
return fmt.Sprintf("PRIVMSG(target=%s, message=%s)", cmd.target, cmd.message)
|
return fmt.Sprintf("PRIVMSG(target=%s, message=%s)", cmd.target, cmd.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPrivMsgCommand(args []string) (editableCommand, error) {
|
func NewPrivMsgCommand(args []string) (Command, error) {
|
||||||
if len(args) < 2 {
|
if len(args) < 2 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -437,7 +431,7 @@ func (cmd *TopicCommand) String() string {
|
|||||||
return fmt.Sprintf("TOPIC(channel=%s, topic=%s)", cmd.channel, cmd.topic)
|
return fmt.Sprintf("TOPIC(channel=%s, topic=%s)", cmd.channel, cmd.topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTopicCommand(args []string) (editableCommand, error) {
|
func NewTopicCommand(args []string) (Command, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -487,7 +481,7 @@ type ModeCommand struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MODE <nickname> *( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) )
|
// MODE <nickname> *( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) )
|
||||||
func NewUserModeCommand(args []string) (editableCommand, error) {
|
func NewUserModeCommand(args []string) (Command, error) {
|
||||||
cmd := &ModeCommand{
|
cmd := &ModeCommand{
|
||||||
nickname: args[0],
|
nickname: args[0],
|
||||||
changes: make(ModeChanges, 0),
|
changes: make(ModeChanges, 0),
|
||||||
@ -564,7 +558,7 @@ type ChannelModeCommand struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MODE <channel> *( ( "-" / "+" ) *<modes> *<modeparams> )
|
// MODE <channel> *( ( "-" / "+" ) *<modes> *<modeparams> )
|
||||||
func NewChannelModeCommand(args []string) (editableCommand, error) {
|
func NewChannelModeCommand(args []string) (Command, error) {
|
||||||
cmd := &ChannelModeCommand{
|
cmd := &ChannelModeCommand{
|
||||||
channel: args[0],
|
channel: args[0],
|
||||||
changes: make(ChannelModeChanges, 0),
|
changes: make(ChannelModeChanges, 0),
|
||||||
@ -611,7 +605,7 @@ func (msg *ChannelModeCommand) String() string {
|
|||||||
return fmt.Sprintf("MODE(channel=%s, changes=%s)", msg.channel, msg.changes)
|
return fmt.Sprintf("MODE(channel=%s, changes=%s)", msg.channel, msg.changes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewModeCommand(args []string) (editableCommand, error) {
|
func NewModeCommand(args []string) (Command, error) {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -630,7 +624,7 @@ type WhoisCommand struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WHOIS [ <target> ] <mask> *( "," <mask> )
|
// WHOIS [ <target> ] <mask> *( "," <mask> )
|
||||||
func NewWhoisCommand(args []string) (editableCommand, error) {
|
func NewWhoisCommand(args []string) (Command, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -662,7 +656,7 @@ type WhoCommand struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WHO [ <mask> [ "o" ] ]
|
// WHO [ <mask> [ "o" ] ]
|
||||||
func NewWhoCommand(args []string) (editableCommand, error) {
|
func NewWhoCommand(args []string) (Command, error) {
|
||||||
cmd := &WhoCommand{}
|
cmd := &WhoCommand{}
|
||||||
|
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
@ -694,7 +688,7 @@ func (msg *OperCommand) LoadPassword(server *Server) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OPER <name> <password>
|
// OPER <name> <password>
|
||||||
func NewOperCommand(args []string) (editableCommand, error) {
|
func NewOperCommand(args []string) (Command, error) {
|
||||||
if len(args) < 2 {
|
if len(args) < 2 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -717,7 +711,7 @@ func (msg *CapCommand) String() string {
|
|||||||
msg.subCommand, msg.capabilities)
|
msg.subCommand, msg.capabilities)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCapCommand(args []string) (editableCommand, error) {
|
func NewCapCommand(args []string) (Command, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -751,7 +745,7 @@ func (msg *ProxyCommand) String() string {
|
|||||||
return fmt.Sprintf("PROXY(sourceIP=%s, sourcePort=%s)", msg.sourceIP, msg.sourcePort)
|
return fmt.Sprintf("PROXY(sourceIP=%s, sourcePort=%s)", msg.sourceIP, msg.sourcePort)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewProxyCommand(args []string) (editableCommand, error) {
|
func NewProxyCommand(args []string) (Command, error) {
|
||||||
if len(args) < 5 {
|
if len(args) < 5 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -775,7 +769,7 @@ func (msg *AwayCommand) String() string {
|
|||||||
return fmt.Sprintf("AWAY(%s)", msg.text)
|
return fmt.Sprintf("AWAY(%s)", msg.text)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAwayCommand(args []string) (editableCommand, error) {
|
func NewAwayCommand(args []string) (Command, error) {
|
||||||
cmd := &AwayCommand{}
|
cmd := &AwayCommand{}
|
||||||
|
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
@ -795,7 +789,7 @@ func (msg *IsOnCommand) String() string {
|
|||||||
return fmt.Sprintf("ISON(nicks=%s)", msg.nicks)
|
return fmt.Sprintf("ISON(nicks=%s)", msg.nicks)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewIsOnCommand(args []string) (editableCommand, error) {
|
func NewIsOnCommand(args []string) (Command, error) {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -810,7 +804,7 @@ type MOTDCommand struct {
|
|||||||
target string
|
target string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMOTDCommand(args []string) (editableCommand, error) {
|
func NewMOTDCommand(args []string) (Command, error) {
|
||||||
cmd := &MOTDCommand{}
|
cmd := &MOTDCommand{}
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
cmd.target = args[0]
|
cmd.target = args[0]
|
||||||
@ -828,7 +822,7 @@ func (cmd *NoticeCommand) String() string {
|
|||||||
return fmt.Sprintf("NOTICE(target=%s, message=%s)", cmd.target, cmd.message)
|
return fmt.Sprintf("NOTICE(target=%s, message=%s)", cmd.target, cmd.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNoticeCommand(args []string) (editableCommand, error) {
|
func NewNoticeCommand(args []string) (Command, error) {
|
||||||
if len(args) < 2 {
|
if len(args) < 2 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -851,7 +845,7 @@ func (msg *KickCommand) Comment() string {
|
|||||||
return msg.comment
|
return msg.comment
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewKickCommand(args []string) (editableCommand, error) {
|
func NewKickCommand(args []string) (Command, error) {
|
||||||
if len(args) < 2 {
|
if len(args) < 2 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -882,7 +876,7 @@ type ListCommand struct {
|
|||||||
target string
|
target string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewListCommand(args []string) (editableCommand, error) {
|
func NewListCommand(args []string) (Command, error) {
|
||||||
cmd := &ListCommand{}
|
cmd := &ListCommand{}
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
cmd.channels = strings.Split(args[0], ",")
|
cmd.channels = strings.Split(args[0], ",")
|
||||||
@ -899,7 +893,7 @@ type NamesCommand struct {
|
|||||||
target string
|
target string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNamesCommand(args []string) (editableCommand, error) {
|
func NewNamesCommand(args []string) (Command, error) {
|
||||||
cmd := &NamesCommand{}
|
cmd := &NamesCommand{}
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
cmd.channels = strings.Split(args[0], ",")
|
cmd.channels = strings.Split(args[0], ",")
|
||||||
@ -915,7 +909,7 @@ type DebugCommand struct {
|
|||||||
subCommand string
|
subCommand string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDebugCommand(args []string) (editableCommand, error) {
|
func NewDebugCommand(args []string) (Command, error) {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -930,7 +924,7 @@ type VersionCommand struct {
|
|||||||
target string
|
target string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewVersionCommand(args []string) (editableCommand, error) {
|
func NewVersionCommand(args []string) (Command, error) {
|
||||||
cmd := &VersionCommand{}
|
cmd := &VersionCommand{}
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
cmd.target = args[0]
|
cmd.target = args[0]
|
||||||
@ -944,7 +938,7 @@ type InviteCommand struct {
|
|||||||
channel string
|
channel string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewInviteCommand(args []string) (editableCommand, error) {
|
func NewInviteCommand(args []string) (Command, error) {
|
||||||
if len(args) < 2 {
|
if len(args) < 2 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -960,7 +954,7 @@ type TimeCommand struct {
|
|||||||
target string
|
target string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTimeCommand(args []string) (editableCommand, error) {
|
func NewTimeCommand(args []string) (Command, error) {
|
||||||
cmd := &TimeCommand{}
|
cmd := &TimeCommand{}
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
cmd.target = args[0]
|
cmd.target = args[0]
|
||||||
@ -974,7 +968,7 @@ type KillCommand struct {
|
|||||||
comment string
|
comment string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewKillCommand(args []string) (editableCommand, error) {
|
func NewKillCommand(args []string) (Command, error) {
|
||||||
if len(args) < 2 {
|
if len(args) < 2 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
@ -991,7 +985,7 @@ type WhoWasCommand struct {
|
|||||||
target string
|
target string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWhoWasCommand(args []string) (editableCommand, error) {
|
func NewWhoWasCommand(args []string) (Command, error) {
|
||||||
if len(args) < 1 {
|
if len(args) < 1 {
|
||||||
return nil, NotEnoughArgsError
|
return nil, NotEnoughArgsError
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ type Socket struct {
|
|||||||
writer *bufio.Writer
|
writer *bufio.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSocket(conn net.Conn, commands chan<- editableCommand) *Socket {
|
func NewSocket(conn net.Conn, commands chan<- Command) *Socket {
|
||||||
socket := &Socket{
|
socket := &Socket{
|
||||||
conn: conn,
|
conn: conn,
|
||||||
reader: bufio.NewReader(conn),
|
reader: bufio.NewReader(conn),
|
||||||
@ -43,7 +43,7 @@ func (socket *Socket) Close() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (socket *Socket) readLines(commands chan<- editableCommand) {
|
func (socket *Socket) readLines(commands chan<- Command) {
|
||||||
commands <- &ProxyCommand{
|
commands <- &ProxyCommand{
|
||||||
hostname: AddrLookupHostname(socket.conn.RemoteAddr()),
|
hostname: AddrLookupHostname(socket.conn.RemoteAddr()),
|
||||||
}
|
}
|
||||||
|
@ -193,6 +193,8 @@ type Replier interface {
|
|||||||
type Command interface {
|
type Command interface {
|
||||||
Code() StringCode
|
Code() StringCode
|
||||||
Client() *Client
|
Client() *Client
|
||||||
|
SetCode(StringCode)
|
||||||
|
SetClient(*Client)
|
||||||
}
|
}
|
||||||
|
|
||||||
type ServerCommand interface {
|
type ServerCommand interface {
|
||||||
|
Loading…
Reference in New Issue
Block a user