diff --git a/HubConnection.go b/HubConnection.go index 6ee8597..85b670d 100644 --- a/HubConnection.go +++ b/HubConnection.go @@ -101,6 +101,14 @@ func (this *HubConnection) SayRaw(protocolCommand string) error { return err } +func (this *HubConnection) SayKeepalive() error { + if !this.connValid { + return ErrNotConnected + } + + return this.SayRaw(this.proto.ProtoMessageSeparator()) +} + func (this *HubConnection) Disconnect() { this.autoReconnect = false if this.conn != nil { @@ -152,7 +160,7 @@ func (this *HubConnection) worker() { err = nil // Send KA packet - err = this.proto.SayKeepalive() + err = this.SayKeepalive() } if nbytes > 0 { diff --git a/NmdcProtocol.go b/NmdcProtocol.go index 1ac3fd1..2c4afeb 100644 --- a/NmdcProtocol.go +++ b/NmdcProtocol.go @@ -57,14 +57,14 @@ func (this *NmdcProtocol) ProcessCommand(message string) { // ``````````` if this.rxPublicChat.MatchString(message) { pubchat_parts := this.rxPublicChat.FindStringSubmatch(message) - this.hc.processEvent(HubEvent{EventType: EVENT_PUBLIC, Nick: pubchat_parts[1], Message: this.Unescape(pubchat_parts[2])}) + this.hc.processEvent(HubEvent{EventType: EVENT_PUBLIC, Nick: pubchat_parts[1], Message: this.unescape(pubchat_parts[2])}) return } // System messages // ``````````````` if message[0] != '$' { - this.hc.processEvent(HubEvent{EventType: EVENT_SYSTEM_MESSAGE_FROM_HUB, Nick: this.hc.HubName, Message: this.Unescape(message)}) + this.hc.processEvent(HubEvent{EventType: EVENT_SYSTEM_MESSAGE_FROM_HUB, Nick: this.hc.HubName, Message: this.unescape(message)}) return } @@ -115,7 +115,7 @@ func (this *NmdcProtocol) ProcessCommand(message string) { this.hc.processEvent(HubEvent{EventType: EVENT_SYSTEM_MESSAGE_FROM_CONN, Message: "This account is passworded."}) this.hc.Disconnect() } else { - this.hc.SayRaw("$MyPass " + this.Escape(this.hc.Hco.NickPassword) + "|") + this.hc.SayRaw("$MyPass " + this.escape(this.hc.Hco.NickPassword) + "|") } case "$Quit": @@ -174,7 +174,7 @@ func (this *NmdcProtocol) ProcessCommand(message string) { if this.rxIncomingTo.MatchString(commandParts[1]) { txparts := this.rxIncomingTo.FindStringSubmatch(commandParts[1]) if txparts[1] == this.hc.Hco.Self.Nick && txparts[2] == txparts[3] { - this.hc.processEvent(HubEvent{EventType: EVENT_PRIVATE, Nick: txparts[2], Message: this.Unescape(txparts[4])}) + this.hc.processEvent(HubEvent{EventType: EVENT_PRIVATE, Nick: txparts[2], Message: this.unescape(txparts[4])}) valid = true } } @@ -235,7 +235,7 @@ func (this *NmdcProtocol) ProcessCommand(message string) { Type: UserCommandType(typeInt), Context: UserCommandContext(contextInt), Message: usc[3], - Command: this.Unescape(usc[4]), + Command: this.unescape(usc[4]), } this.hc.processEvent(HubEvent{EventType: EVENT_USERCOMMAND, UserCommand: &uscStruct}) @@ -258,7 +258,7 @@ func (this *NmdcProtocol) ProcessCommand(message string) { this.sayInfo() this.hc.SayRaw("$GetNickList|") } else { - this.hc.SayRaw("$ValidateNick " + this.Escape(this.hc.Hco.Self.Nick) + "|") + this.hc.SayRaw("$ValidateNick " + this.escape(this.hc.Hco.Self.Nick) + "|") } // This also counts as the end of the handshake from our POV. Consider @@ -282,24 +282,24 @@ func (this *NmdcProtocol) ProcessCommand(message string) { } } -func (this *NmdcProtocol) Escape(plaintext string) string { +func (this *NmdcProtocol) escape(plaintext string) string { v1 := strings.Replace(plaintext, "&", "&", -1) v2 := strings.Replace(v1, "|", "|", -1) return strings.Replace(v2, "$", "$", -1) } -func (this *NmdcProtocol) Unescape(encoded string) string { +func (this *NmdcProtocol) unescape(encoded string) string { v1 := strings.Replace(encoded, "$", "$", -1) v2 := strings.Replace(v1, "|", "|", -1) return strings.Replace(v2, "&", "&", -1) } func (this *NmdcProtocol) SayPublic(message string) { - this.hc.SayRaw("<" + this.hc.Hco.Self.Nick + "> " + this.Escape(message) + "|") + this.hc.SayRaw("<" + this.hc.Hco.Self.Nick + "> " + this.escape(message) + "|") } func (this *NmdcProtocol) SayPrivate(recipient, message string) { - this.hc.SayRaw("$To: " + recipient + " From: " + this.hc.Hco.Self.Nick + " $<" + this.hc.Hco.Self.Nick + "> " + this.Escape(message) + "|") + this.hc.SayRaw("$To: " + recipient + " From: " + this.hc.Hco.Self.Nick + " $<" + this.hc.Hco.Self.Nick + "> " + this.escape(message) + "|") } func (this *NmdcProtocol) sayInfo() { @@ -313,8 +313,8 @@ func (this *NmdcProtocol) parseMyINFO(protomsg string) (*UserInfo, error) { matches := this.rxMyInfo.FindStringSubmatch(protomsg) if matches != nil { ret.Nick = matches[1] - ret.Description = this.Unescape(matches[2]) - ret.ClientTag = this.Unescape(matches[3]) + ret.Description = this.unescape(matches[2]) + ret.ClientTag = this.unescape(matches[3]) ret.ClientVersion = matches[4] ret.ConnectionMode = ConnectionMode(matches[5][0]) maybeParse(matches[6], &ret.HubsUnregistered, 0) @@ -327,7 +327,7 @@ func (this *NmdcProtocol) parseMyINFO(protomsg string) (*UserInfo, error) { ret.Speed = "" } ret.Flag = UserFlag(matches[10][len(matches[10])-1]) - ret.Email = this.Unescape(matches[11]) + ret.Email = this.unescape(matches[11]) maybeParse(matches[12], &ret.ShareSize, 0) return &ret, nil @@ -337,7 +337,7 @@ func (this *NmdcProtocol) parseMyINFO(protomsg string) (*UserInfo, error) { matches = this.rxMyInfoNoTag.FindStringSubmatch(protomsg) if matches != nil { ret.Nick = matches[1] - ret.Description = this.Unescape(matches[2]) + ret.Description = this.unescape(matches[2]) ret.ClientTag = "" ret.ClientVersion = "0" ret.ConnectionMode = CONNECTIONMODE_PASSIVE @@ -352,7 +352,7 @@ func (this *NmdcProtocol) parseMyINFO(protomsg string) (*UserInfo, error) { ret.Speed = "" } ret.Flag = UserFlag(matches[3][len(matches[3])-1]) - ret.Email = this.Unescape(matches[4]) + ret.Email = this.unescape(matches[4]) maybeParse(matches[5], &ret.ShareSize, 0) return &ret, nil @@ -382,10 +382,6 @@ func (this *NmdcProtocol) getUserMyINFO(u *UserInfo) string { ) } -func (this *NmdcProtocol) SayKeepalive() error { - return this.hc.SayRaw("|") -} - func (this *NmdcProtocol) ProtoMessageSeparator() string { return "|" } diff --git a/Protocol.go b/Protocol.go index fe95707..d4ef391 100644 --- a/Protocol.go +++ b/Protocol.go @@ -3,15 +3,9 @@ package libnmdc type Protocol interface { ProcessCommand(msg string) - Escape(string) string - - Unescape(string) string - SayPublic(string) SayPrivate(user, message string) - SayKeepalive() error - ProtoMessageSeparator() string }