func (s *serverConn) onOpen() error { upgrades := []string{} for name := range s.callback.transports() { if name == s.currentName { continue } upgrades = append(upgrades, name) } type connectionInfo struct { Sid string `json:"sid"` Upgrades []string `json:"upgrades"` PingInterval time.Duration `json:"pingInterval"` PingTimeout time.Duration `json:"pingTimeout"` } resp := connectionInfo{ Sid: s.Id(), Upgrades: upgrades, PingInterval: s.callback.configure().PingInterval / time.Millisecond, PingTimeout: s.callback.configure().PingTimeout / time.Millisecond, } w, err := s.getCurrent().NextWriter(message.MessageText, parser.OPEN) if err != nil { return err } encoder := json.NewEncoder(w) if err := encoder.Encode(resp); err != nil { return err } if err := w.Close(); err != nil { return err } return nil }
func (e *encoder) encodePacket(v packet) error { writer, err := e.w.NextWriter(engineio.MessageText) if err != nil { return err } defer writer.Close() w := newTrimWriter(writer, "\n") wh := newWriterHelper(w) wh.Write([]byte{byte(v.Type) + '0'}) if v.Type == _BINARY_EVENT || v.Type == _BINARY_ACK { wh.Write([]byte(fmt.Sprintf("%d-", v.attachNumber))) } needEnd := false if v.NSP != "" { wh.Write([]byte(v.NSP)) needEnd = true } if v.Id >= 0 { f := "%d" if needEnd { f = ",%d" needEnd = false } wh.Write([]byte(fmt.Sprintf(f, v.Id))) } if v.Data != nil { if needEnd { wh.Write([]byte{','}) needEnd = false } if wh.Error() != nil { return wh.Error() } encoder := json.NewEncoder(w) return encoder.Encode(v.Data) } return wh.Error() }