Browse Source

переделал разбор xml из сети

kpmy 9 years ago
parent
commit
9d8c4efd6e
3 changed files with 14 additions and 19 deletions
  1. 5 15
      c2s/stream/stream.go
  2. 7 2
      c2s/stream/xml.go
  3. 2 2
      muc-client/main.go

+ 5 - 15
c2s/stream/stream.go

@@ -128,21 +128,11 @@ func Dial(_s Stream) (err error) {
 						stream.conn.Close()
 					}(x)
 					go func(stream *xmppStream) {
-						var err error
-						buf := make([]byte, 65535)
-						for err == nil {
-							n := 0
-							n, err = stream.conn.Read(buf)
-							if n > 0 && err == nil {
-								data := make([]byte, n)
-								copy(data, buf)
-								log.Println("PRE")
-								log.Println(string(data))
-								log.Println()
-								for data := range spl1t(data) {
-									stream.data <- pack{data: data, hash: adler32.Checksum(data)}
-								}
-							}
+						for data := range spl1t(stream.conn) {
+							log.Println("SPLIT")
+							log.Println(string(data))
+							log.Println()
+							stream.data <- pack{data: data, hash: adler32.Checksum(data)}
 						}
 					}(x)
 					w.base = x

+ 7 - 2
c2s/stream/xml.go

@@ -4,13 +4,14 @@ import (
 	"bytes"
 	"encoding/xml"
 	"github.com/kpmy/ypk/halt"
+	"io"
 	"reflect"
 )
 
-func spl1t(bunch []byte) (ret chan []byte) {
+func spl1t(bunch io.Reader) (ret chan []byte) {
 	ret = make(chan []byte)
 	go func() {
-		d := xml.NewDecoder(bytes.NewReader(bunch))
+		d := xml.NewDecoder(bunch)
 		d.Strict = false
 		var (
 			_t  xml.Token
@@ -53,6 +54,10 @@ func spl1t(bunch []byte) (ret chan []byte) {
 					}
 					tt.Attr = tmp
 					e.EncodeToken(tt)
+					if tt.Name.Local == "stream:stream" {
+						depth--
+						flush()
+					}
 					depth++
 				case xml.EndElement:
 					tt := t

+ 2 - 2
muc-client/main.go

@@ -7,7 +7,7 @@ import (
 	"github.com/ivpusic/neo"
 	"github.com/ivpusic/neo-cors"
 	"github.com/ivpusic/neo/middlewares/logger"
-	"github.com/skratchdot/open-golang/open"
+	//	"github.com/skratchdot/open-golang/open"
 	"html/template"
 	"log"
 	"math/rand"
@@ -267,7 +267,7 @@ func main() {
 	}()
 	go func() {
 		time.Sleep(time.Duration(time.Millisecond * 200))
-		open.Start("http://localhost:3000")
+		//open.Start("http://localhost:3000")
 		//open.Start("http://localhost:3000/stat")
 	}()
 	wg.Wait()