func (c *ReactiveConn) Initialize(firstStreamId uint32) {
	c.dec = frame.NewFrameDecoder(c.Rwc)
	c.enc = frame.NewFrameEncoder(c.Rwc)
	handler, err := c.Setup(c)
	if err != nil {
		c.fatalError(err)
	}
	c.Protocol = proto.NewProtocol(
		handler,
		firstStreamId,
		func(f *frame.Frame) error {
			fmt.Printf("[C%d] -> %s\n", c.Id, f.Describe())
			return c.enc.Write(f)
		},
	)
}
firstStreamId is used to start the stream id generator - you should set this
to 2 if you are implementing a server and 1 if you are implementing a client,
this maintains the odd/even invariant to separate clients and servers.
package trans
import (
	"fmt"
	"github.com/jakewins/reactivesocket-go/pkg/internal/codec/header"
	"github.com/jakewins/reactivesocket-go/pkg/internal/frame"
	"github.com/jakewins/reactivesocket-go/pkg/internal/frame/setup"
	"github.com/jakewins/reactivesocket-go/pkg/internal/proto"
	"github.com/jakewins/reactivesocket-go/pkg/rs"
	"io"
	"net"
)
type ReactiveConn struct {
	Id       int
	Rwc      net.Conn
	Setup    func(*ReactiveConn) (*rs.RequestHandler, error)
	frame    frame.Frame
	Protocol *proto.Protocol
	enc      *frame.FrameEncoder
	dec      *frame.FrameDecoder
}