# HG changeset patch # User Chris Jones # Date 1378179983 25200 # Node ID f464f14e39a7100a0c8c1506aea9d25cff9d4864 # Parent 34e917ca6a113d8a44b153e778eabf1be095f5c9 Renamed examples to example, since there's only one program there. diff -r 34e917ca6a11 -r f464f14e39a7 example/interact.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/interact.go Mon Sep 02 20:46:23 2013 -0700 @@ -0,0 +1,114 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + xmpp ".." + "crypto/tls" + "encoding/xml" + "flag" + "fmt" + "log" + "os" + "strings" +) + +type StdLogger struct { +} + +func (s *StdLogger) Log(v ...interface{}) { + log.Println(v...) +} + +func (s *StdLogger) Logf(fmt string, v ...interface{}) { + log.Printf(fmt, v...) +} + +func init() { + logger := &StdLogger{} + // xmpp.Debug = logger + xmpp.Info = logger + xmpp.Warn = logger + + xmpp.TlsConfig = tls.Config{InsecureSkipVerify: true} +} + +// Demonstrate the API, and allow the user to interact with an XMPP +// server via the terminal. +func main() { + var jid xmpp.JID + flag.Var(&jid, "jid", "JID to log in as") + var pw *string = flag.String("pw", "", "password") + flag.Parse() + if jid.Domain == "" || *pw == "" { + flag.Usage() + os.Exit(2) + } + + c, err := xmpp.NewClient(&jid, *pw, nil) + if err != nil { + log.Fatalf("NewClient(%v): %v", jid, err) + } + defer close(c.Out) + + err = c.StartSession(&xmpp.Presence{}) + if err != nil { + log.Fatalf("StartSession: %v", err) + } + c.Roster.Update() + roster := c.Roster.Get() + fmt.Printf("%d roster entries:\n", len(roster)) + for i, entry := range roster { + fmt.Printf("%d: %v\n", i, entry) + } + + go func(ch <-chan xmpp.Stanza) { + for obj := range ch { + fmt.Printf("s: %v\n", obj) + } + fmt.Println("done reading") + }(c.In) + + p := make([]byte, 1024) + for { + nr, _ := os.Stdin.Read(p) + if nr == 0 { + break + } + s := string(p) + dec := xml.NewDecoder(strings.NewReader(s)) + t, err := dec.Token() + if err != nil { + fmt.Printf("token: %s\n", err) + break + } + var se *xml.StartElement + var ok bool + if se, ok = t.(*xml.StartElement); !ok { + fmt.Println("Couldn't find start element") + break + } + var stan xmpp.Stanza + switch se.Name.Local { + case "iq": + stan = &xmpp.Iq{} + case "message": + stan = &xmpp.Message{} + case "presence": + stan = &xmpp.Presence{} + default: + fmt.Println("Can't parse non-stanza.") + continue + } + err = dec.Decode(stan) + if err == nil { + c.Out <- stan + } else { + fmt.Printf("Parse error: %v\n", err) + break + } + } + fmt.Println("done sending") +} diff -r 34e917ca6a11 -r f464f14e39a7 examples/interact.go --- a/examples/interact.go Mon Sep 02 20:45:24 2013 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package main - -import ( - xmpp ".." - "crypto/tls" - "encoding/xml" - "flag" - "fmt" - "log" - "os" - "strings" -) - -type StdLogger struct { -} - -func (s *StdLogger) Log(v ...interface{}) { - log.Println(v...) -} - -func (s *StdLogger) Logf(fmt string, v ...interface{}) { - log.Printf(fmt, v...) -} - -func init() { - logger := &StdLogger{} - // xmpp.Debug = logger - xmpp.Info = logger - xmpp.Warn = logger - - xmpp.TlsConfig = tls.Config{InsecureSkipVerify: true} -} - -// Demonstrate the API, and allow the user to interact with an XMPP -// server via the terminal. -func main() { - var jid xmpp.JID - flag.Var(&jid, "jid", "JID to log in as") - var pw *string = flag.String("pw", "", "password") - flag.Parse() - if jid.Domain == "" || *pw == "" { - flag.Usage() - os.Exit(2) - } - - c, err := xmpp.NewClient(&jid, *pw, nil) - if err != nil { - log.Fatalf("NewClient(%v): %v", jid, err) - } - defer close(c.Out) - - err = c.StartSession(&xmpp.Presence{}) - if err != nil { - log.Fatalf("StartSession: %v", err) - } - c.Roster.Update() - roster := c.Roster.Get() - fmt.Printf("%d roster entries:\n", len(roster)) - for i, entry := range roster { - fmt.Printf("%d: %v\n", i, entry) - } - - go func(ch <-chan xmpp.Stanza) { - for obj := range ch { - fmt.Printf("s: %v\n", obj) - } - fmt.Println("done reading") - }(c.In) - - p := make([]byte, 1024) - for { - nr, _ := os.Stdin.Read(p) - if nr == 0 { - break - } - s := string(p) - dec := xml.NewDecoder(strings.NewReader(s)) - t, err := dec.Token() - if err != nil { - fmt.Printf("token: %s\n", err) - break - } - var se *xml.StartElement - var ok bool - if se, ok = t.(*xml.StartElement); !ok { - fmt.Println("Couldn't find start element") - break - } - var stan xmpp.Stanza - switch se.Name.Local { - case "iq": - stan = &xmpp.Iq{} - case "message": - stan = &xmpp.Message{} - case "presence": - stan = &xmpp.Presence{} - default: - fmt.Println("Can't parse non-stanza.") - continue - } - err = dec.Decode(stan) - if err == nil { - c.Out <- stan - } else { - fmt.Printf("Parse error: %v\n", err) - break - } - } - fmt.Println("done sending") -}