examples/interact.go
changeset 110 7696e6a01709
parent 109 3887d7ad19c1
child 113 bee6cc131798
equal deleted inserted replaced
109:3887d7ad19c1 110:7696e6a01709
     5 package main
     5 package main
     6 
     6 
     7 import (
     7 import (
     8 	xmpp ".."
     8 	xmpp ".."
     9 	"crypto/tls"
     9 	"crypto/tls"
       
    10 	"encoding/xml"
    10 	"flag"
    11 	"flag"
    11 	"fmt"
    12 	"fmt"
    12 	"log"
    13 	"log"
    13 	"os"
    14 	"os"
       
    15 	"strings"
    14 )
    16 )
    15 
    17 
    16 type StdLogger struct {
    18 type StdLogger struct {
    17 }
    19 }
    18 
    20 
    19 func (s *StdLogger) Log(v ...interface{}) {
    21 func (s *StdLogger) Log(v ...interface{}) {
    20 	log.Println(v)
    22 	log.Println(v...)
    21 }
    23 }
    22 
    24 
    23 func (s *StdLogger) Logf(fmt string, v ...interface{}) {
    25 func (s *StdLogger) Logf(fmt string, v ...interface{}) {
    24 	log.Printf(fmt, v)
    26 	log.Printf(fmt, v...)
    25 }
    27 }
    26 
    28 
    27 func init() {
    29 func init() {
    28 	logger := &StdLogger{}
    30 	logger := &StdLogger{}
    29 	// xmpp.Debug = logger
    31 	// xmpp.Debug = logger
    59 	fmt.Printf("%d roster entries:\n", len(roster))
    61 	fmt.Printf("%d roster entries:\n", len(roster))
    60 	for i, entry := range(roster) {
    62 	for i, entry := range(roster) {
    61 		fmt.Printf("%d: %v\n", i, entry)
    63 		fmt.Printf("%d: %v\n", i, entry)
    62 	}
    64 	}
    63 
    65 
    64 	go func(ch <-chan xmpp.Stanza) {
    66 	go func(ch <-chan interface{}) {
    65 		for obj := range ch {
    67 		for obj := range ch {
    66 			fmt.Printf("s: %v\n", obj)
    68 			fmt.Printf("s: %v\n", obj)
    67 		}
    69 		}
    68 		fmt.Println("done reading")
    70 		fmt.Println("done reading")
    69 	}(c.In)
    71 	}(c.In)
    73 		nr, _ := os.Stdin.Read(p)
    75 		nr, _ := os.Stdin.Read(p)
    74 		if nr == 0 {
    76 		if nr == 0 {
    75 			break
    77 			break
    76 		}
    78 		}
    77 		s := string(p)
    79 		s := string(p)
    78 		stan, err := xmpp.ParseStanza(s)
    80 		dec := xml.NewDecoder(strings.NewReader(s))
       
    81 		t, err := dec.Token()
       
    82 		if err != nil {
       
    83 			fmt.Printf("token: %s\n", err)
       
    84 			break
       
    85 		}
       
    86 		var se *xml.StartElement
       
    87 		var ok bool
       
    88 		if se, ok = t.(*xml.StartElement) ; !ok {
       
    89 			fmt.Println("Couldn't find start element")
       
    90 			break
       
    91 		}
       
    92 		var stan interface{}
       
    93 		switch se.Name.Local {
       
    94 		case "iq":
       
    95 			stan = &xmpp.Iq{}
       
    96 		case "message":
       
    97 			stan = &xmpp.Message{}
       
    98 		case "presence":
       
    99 			stan = &xmpp.Presence{}
       
   100 		default:
       
   101 			fmt.Println("Can't parse non-stanza.")
       
   102 			continue
       
   103 		}
       
   104 		err = dec.Decode(stan)
    79 		if err == nil {
   105 		if err == nil {
    80 			c.Out <- stan
   106 			c.Out <- stan
    81 		} else {
   107 		} else {
    82 			fmt.Printf("Parse error: %v\n", err)
   108 			fmt.Printf("Parse error: %v\n", err)
    83 			break
   109 			break