return errors from saypublic/sayprivate et al

This commit is contained in:
mappu 2018-06-04 16:27:34 +12:00
parent 444854e586
commit 9eddfc6e58
5 changed files with 40 additions and 30 deletions

View File

@ -468,8 +468,8 @@ func (this *AdcProtocol) ourINFO(includePid bool) string {
return ret[1:] return ret[1:]
} }
func (this *AdcProtocol) SayInfo() { func (this *AdcProtocol) SayInfo() error {
this.hc.SayRaw("BINF " + this.escape(this.sid) + " " + this.ourINFO(true) + "\n") return this.hc.SayRaw("BINF " + this.escape(this.sid) + " " + this.ourINFO(true) + "\n")
} }
func (this *AdcProtocol) parts2flags(parts []string) (map[string]string, error) { func (this *AdcProtocol) parts2flags(parts []string) (map[string]string, error) {
@ -614,16 +614,17 @@ func (this *AdcProtocol) unescape(encoded string) string {
return strings.Replace(v2, `\\`, `\`, -1) return strings.Replace(v2, `\\`, `\`, -1)
} }
func (this *AdcProtocol) SayPublic(msg string) { func (this *AdcProtocol) SayPublic(msg string) error {
this.hc.SayRaw("BMSG " + this.sid + " " + this.escape(msg) + "\n") return this.hc.SayRaw("BMSG " + this.sid + " " + this.escape(msg) + "\n")
} }
func (this *AdcProtocol) SayPrivate(user, message string) { func (this *AdcProtocol) SayPrivate(user, message string) error {
if sid, ok := this.Nick2SID(user); ok { sid, ok := this.Nick2SID(user)
this.hc.SayRaw("DMSG " + this.sid + " " + sid + " " + this.escape(message) + "\n") if !ok {
} else { return fmt.Errorf("Unknown user '%s'", user)
this.logError(fmt.Errorf("Unknown user '%s'", user))
} }
return this.hc.SayRaw("DMSG " + this.sid + " " + sid + " " + this.escape(message) + "\n")
} }
func (this *AdcProtocol) ProtoMessageSeparator() string { func (this *AdcProtocol) ProtoMessageSeparator() string {

View File

@ -49,34 +49,34 @@ func (this *AutodetectProtocol) ProcessCommand(msg string) {
this.realProto.ProcessCommand(msg) this.realProto.ProcessCommand(msg)
} }
func (this *AutodetectProtocol) SayPublic(msg string) { func (this *AutodetectProtocol) SayPublic(msg string) error {
this.realProtoMut.Lock() this.realProtoMut.Lock()
defer this.realProtoMut.Unlock() defer this.realProtoMut.Unlock()
if this.realProto == nil { if this.realProto == nil {
this.realProto = NewNmdcProtocol(this.hc) this.realProto = NewNmdcProtocol(this.hc)
} }
this.realProto.SayPublic(msg) return this.realProto.SayPublic(msg)
} }
func (this *AutodetectProtocol) SayPrivate(user, message string) { func (this *AutodetectProtocol) SayPrivate(user, message string) error {
this.realProtoMut.Lock() this.realProtoMut.Lock()
defer this.realProtoMut.Unlock() defer this.realProtoMut.Unlock()
if this.realProto == nil { if this.realProto == nil {
this.realProto = NewNmdcProtocol(this.hc) this.realProto = NewNmdcProtocol(this.hc)
} }
this.realProto.SayPrivate(user, message) return this.realProto.SayPrivate(user, message)
} }
func (this *AutodetectProtocol) SayInfo() { func (this *AutodetectProtocol) SayInfo() error {
this.realProtoMut.Lock() this.realProtoMut.Lock()
defer this.realProtoMut.Unlock() defer this.realProtoMut.Unlock()
if this.realProto == nil { if this.realProto == nil {
this.realProto = NewNmdcProtocol(this.hc) this.realProto = NewNmdcProtocol(this.hc)
} }
this.realProto.SayInfo() return this.realProto.SayInfo()
} }
func (this *AutodetectProtocol) ProtoMessageSeparator() string { func (this *AutodetectProtocol) ProtoMessageSeparator() string {

View File

@ -41,16 +41,25 @@ func (this *HubConnection) Users(cb func(*map[string]UserInfo) error) error {
return cb(&this.users) return cb(&this.users)
} }
func (this *HubConnection) SayPublic(message string) { func (this *HubConnection) SayPublic(message string) error {
this.proto.SayPublic(message) if this.proto == nil {
return ErrNotConnected
}
return this.proto.SayPublic(message)
} }
func (this *HubConnection) SayPrivate(recipient string, message string) { func (this *HubConnection) SayPrivate(recipient string, message string) error {
this.proto.SayPrivate(recipient, message) if this.proto == nil {
return ErrNotConnected
}
return this.proto.SayPrivate(recipient, message)
} }
func (this *HubConnection) SayInfo() { func (this *HubConnection) SayInfo() error {
this.proto.SayInfo() if this.proto == nil {
return ErrNotConnected
}
return this.proto.SayInfo()
} }
func (this *HubConnection) UserExists(nick string) bool { func (this *HubConnection) UserExists(nick string) bool {

View File

@ -292,16 +292,16 @@ func (this *NmdcProtocol) unescape(encoded string) string {
return strings.Replace(v2, "&", "&", -1) return strings.Replace(v2, "&", "&", -1)
} }
func (this *NmdcProtocol) SayPublic(message string) { func (this *NmdcProtocol) SayPublic(message string) error {
this.hc.SayRaw("<" + this.hc.Hco.Self.Nick + "> " + this.escape(message) + "|") return this.hc.SayRaw("<" + this.hc.Hco.Self.Nick + "> " + this.escape(message) + "|")
} }
func (this *NmdcProtocol) SayPrivate(recipient, message string) { func (this *NmdcProtocol) SayPrivate(recipient, message string) error {
this.hc.SayRaw("$To: " + recipient + " From: " + this.hc.Hco.Self.Nick + " $<" + this.hc.Hco.Self.Nick + "> " + this.escape(message) + "|") return this.hc.SayRaw("$To: " + recipient + " From: " + this.hc.Hco.Self.Nick + " $<" + this.hc.Hco.Self.Nick + "> " + this.escape(message) + "|")
} }
func (this *NmdcProtocol) SayInfo() { func (this *NmdcProtocol) SayInfo() error {
this.hc.SayRaw(this.getUserMyINFO(this.hc.Hco.Self) + "|") return this.hc.SayRaw(this.getUserMyINFO(this.hc.Hco.Self) + "|")
} }
func (this *NmdcProtocol) parseMyINFO(protomsg string) (*UserInfo, error) { func (this *NmdcProtocol) parseMyINFO(protomsg string) (*UserInfo, error) {

View File

@ -3,11 +3,11 @@ package libnmdc
type Protocol interface { type Protocol interface {
ProcessCommand(msg string) ProcessCommand(msg string)
SayPublic(string) SayPublic(string) error
SayPrivate(user, message string) SayPrivate(user, message string) error
SayInfo() SayInfo() error
ProtoMessageSeparator() string ProtoMessageSeparator() string
} }