func (c *clientConn) OnPacket(r *parser.PacketDecoder) { if s := c.getState(); s != stateNormal && s != stateUpgrading { return } switch r.Type() { case parser.OPEN: case parser.CLOSE: c.getCurrent().Close() case parser.PING: t := c.getCurrent() u := c.getUpgrade() newWriter := t.NextWriter if u != nil { if w, _ := t.NextWriter(message.MessageText, parser.NOOP); w != nil { w.Close() } newWriter = u.NextWriter } if w, _ := newWriter(message.MessageText, parser.PONG); w != nil { io.Copy(w, r) w.Close() } fallthrough case parser.PONG: c.pingChan <- true if c.getState() == stateUpgrading { p := make([]byte, 64) _, err := r.Read(p) if err == nil && strings.Contains(string(p), "probe") { c.writerLocker.Lock() w, _ := c.getUpgrade().NextWriter(message.MessageText, parser.UPGRADE) if w != nil { io.Copy(w, r) w.Close() } c.writerLocker.Unlock() c.upgraded() //fmt.Println("probe") /* w, _ = c.getCurrent().NextWriter(message.MessageText, parser.MESSAGE) if w != nil { w.Write([]byte("2[\"message\",\"testtesttesttesttesttest\"]")) w.Close() } */ } } case parser.MESSAGE: closeChan := make(chan struct{}) c.readerChan <- newConnReader(r, closeChan) <-closeChan close(closeChan) r.Close() case parser.UPGRADE: c.upgraded() case parser.NOOP: } }
func (c *serverConn) OnPacket(r *parser.PacketDecoder) { if s := c.getState(); s != stateNormal && s != stateUpgrading { return } switch r.Type() { case parser.OPEN: case parser.CLOSE: c.getCurrent().Close() case parser.PING: c.writerLocker.Lock() t := c.getCurrent() u := c.getUpgrade() newWriter := t.NextWriter if u != nil { if w, _ := t.NextWriter(message.MessageText, parser.NOOP); w != nil { w.Close() } newWriter = u.NextWriter } if w, _ := newWriter(message.MessageText, parser.PONG); w != nil { io.Copy(w, r) w.Close() } c.writerLocker.Unlock() fallthrough case parser.PONG: c.pingChan <- true case parser.MESSAGE: closeChan := make(chan struct{}) c.readerChan <- newConnReader(r, closeChan) <-closeChan close(closeChan) r.Close() case parser.UPGRADE: c.upgraded() case parser.NOOP: } }
func (f *fakeCallback) OnPacket(r *parser.PacketDecoder) { f.packetType = r.Type() f.messageType = r.MessageType() f.body, f.err = ioutil.ReadAll(r) f.onPacket <- true }