further reduce protocol interface surface
--HG-- branch : adc
This commit is contained in:
parent
2a60330e7c
commit
5c4d6d8355
@ -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 {
|
||||
|
@ -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 "|"
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user