scdt

package module
v0.0.23 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2020 License: MIT Imports: 20 Imported by: 1

README

scdt

SCDT(single connection data transmission) is a package of tcp data transmission

It use TCP to establish a one-way channel And make both ends free to send and receive data

server:

l, err := NewListener("0.0.0.0:12345")
if err != nil {
    panic(err)
}

//send some data to client and wait success
l.RangeConnections(f func(id string, connection Connection){
    l.SendTo(id, []byte("hello"), func(id string, message *Message){
        //do something
    })

    l.SendTo(id, []byte("hello"), func(id string, message *Message){
        //do something
    })

    l.SendCustomTo(id, 0x02, []byte("hello"), f func(id string, message *Message){
        //do something 
    }) 

}) 

//wait
time.Sleep(30*time.Minute)
//stop
l.Stop()

client

dial, err := net.Dial("tcp", "localhost:12345")
if err != nil {
    log.Errorw("dail error", "err", err)
}
connect := Connect(dial)
//send some data to server and wait success
msg, b := connect.SendOnWait([]byte("hello"))
if b {
    fmt.Printf("waited send message:%+v,data:%s\n", msg, msg.Data)
}
//send some data to server and wait success callback
queue,ok:=connect.SendWithCallback([]byte("hello"), func(message *Message) {
    fmt.Printf("send message:%+v,data:%s\n", message, message.Data)
})
//send some data to server
queue,ok:=connect.Send([]byte("hello"))
if ok {
    //get the response message
    msg:=queue.Wait()
    if msg!=nil{
        //data was here
        fmt.Println(string(msg.Data))
    }   
}


//called when recv some message
connect.Recv(func(message *Message) ([]byte, error) {
    fmt.Printf("recv message:%+v,data:%s\n", id, message.Data)
    return nil, nil
})

client with custom data

//send some data to server with a custom id and wait success callback
queue,ok:=connect.SendCustomDataWithCallback(0x01,[]byte("hello"), func(message *Message) {
    fmt.Printf("send message:%+v,data:%s\n", message, message.Data)		
})
//called when recv some message
connect.RecvCustomData(func(message *Message) ([]byte, error) {
    fmt.Printf("recv message:%+v,data:%s\n", id, message.Data)
    return nil, nil
})

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrPing = errors.New("ping remote address failed")

ErrPing ...

Functions

func ScanExchange

func ScanExchange(scanner *bufio.Scanner, packer ReadPacker) error

ScanExchange ...

func UUID

func UUID() string

UUID ...

Types

type Config

type Config struct {
	Timeout time.Duration
}

Config ...

type ConfigFunc

type ConfigFunc func(c *Config)

ConfigFunc ...

type Connection

type Connection interface {
	LocalID() string
	RemoteID() (string, error)
	Ping() (string, error)
	Close()
	IsClosed() bool
	NetConn() net.Conn
	SendQueue(q *Queue) bool
	Recv(fn RecvCallbackFunc)
	OnRecv(fn OnRecvCallbackFunc)
	RecvCustomData(fn RecvCallbackFunc)
	SendCustomData(id CustomID, data []byte) (*Queue, bool)
	SendCustomDataOnWait(id CustomID, data []byte) (msg *Message, b bool)
	SendCustomDataWithCallback(id CustomID, data []byte, cb func(message *Message)) (*Queue, bool)
	Send(data []byte) (*Queue, bool)
	SendOnWait(data []byte) (*Message, bool)
	SendWithCallback(data []byte, cb func(message *Message)) (*Queue, bool)
	SendClose([]byte) bool
}

Connection ...

func Accept

func Accept(id string, conn net.Conn, cfs ...ConfigFunc) Connection

Accept ...

func Connect

func Connect(id string, conn net.Conn, cfs ...ConfigFunc) Connection

Connect ...

func NewConnection added in v0.0.22

func NewConnection(id string, conn net.Conn, cfs ...ConfigFunc) Connection

NewConnection ...

type CustomID

type CustomID uint16

CustomID ...

type DataLength

type DataLength uint64

DataLength ...

func Length

func Length(data []byte) DataLength

Length ...

type Extension

type Extension uint16

Extension ...

type HandleRecvFunc

type HandleRecvFunc func(id string, message *Message) ([]byte, bool)

HandleRecvFunc ...

type Listener

type Listener interface {
	Stop() error
	Conn(id string) (Connection, bool)
	Listen(network string, lis net.Listener) (b bool)
	HandleRecv(fn HandleRecvFunc)
	SendCustomTo(id string, cid CustomID, data []byte, f func(id string, message *Message)) (*Queue, bool)
	SendTo(id string, data []byte, f func(id string, message *Message)) (*Queue, bool)
	Range(f func(id string, connection Connection))
}

Listener ...

func NewListener

func NewListener(id string, cfs ...ConfigFunc) (Listener, error)

NewListener ...

type Message

type Message struct {
	MessageID  MessageID
	CustomID   CustomID
	DataLength DataLength
	Session    Session
	Data       []byte
	// contains filtered or unexported fields
}

Message ...

func (*Message) Error added in v0.0.7

func (m *Message) Error() error

Error ...

func (Message) Pack

func (m Message) Pack(writer io.Writer) (err error)

Pack ...

func (*Message) RequestType

func (m *Message) RequestType() Type

RequestType ...

func (*Message) SetCustomID

func (m *Message) SetCustomID(id CustomID) *Message

SetCustomID ...

func (*Message) SetData

func (m *Message) SetData(data []byte) *Message

SetData ...

func (*Message) SetDataString

func (m *Message) SetDataString(data string) *Message

SetDataString ...

func (*Message) SetRequestType

func (m *Message) SetRequestType(requestType Type) *Message

SetRequestType ...

func (*Message) Unpack

func (m *Message) Unpack(reader io.Reader) (err error)

Unpack ...

type MessageCallbackFunc

type MessageCallbackFunc func(data []byte)

MessageCallbackFunc ...

type MessageID

type MessageID uint8

MessageID ...

const (
	// MessagePing ...
	MessagePing MessageID = iota + 1
	// MessageHeartBeat ...
	MessageHeartBeat
	// MessageIDRequest ...
	MessageIDRequest
	// MessageDataTransfer ...
	MessageDataTransfer
	// MessageUserCustom ...
	MessageUserCustom
	// MessageRecvFailed ...
	MessageRecvFailed
	// MessageClose ...
	MessageClose
)

type OnRecvCallbackFunc added in v0.0.20

type OnRecvCallbackFunc func(src *Message, target *Message) (bool, error)

OnRecvCallbackFunc ...

type Queue

type Queue struct {
	// contains filtered or unexported fields
}

Queue ...

func CallbackQueue

func CallbackQueue(msg *Message) *Queue

CallbackQueue ...

func DefaultQueue

func DefaultQueue(msg *Message) *Queue

DefaultQueue ...

func (*Queue) NeedCallback

func (q *Queue) NeedCallback() bool

NeedCallback ...

func (*Queue) RecvCallback added in v0.0.15

func (q *Queue) RecvCallback() func(msg *Message)

RecvCallback ...

func (*Queue) Session

func (q *Queue) Session() Session

Session ...

func (*Queue) SetRecvCallback added in v0.0.15

func (q *Queue) SetRecvCallback(recvCallback func(msg *Message)) *Queue

SetRecvCallback ...

func (*Queue) SetSendCallback

func (q *Queue) SetSendCallback(f func(message *Message)) *Queue

SetSendCallback ...

func (*Queue) SetTimeout

func (q *Queue) SetTimeout(timeout time.Duration)

SetTimeout set timeout with time duration

func (*Queue) Timeout

func (q *Queue) Timeout() time.Duration

Timeout ...

func (*Queue) Wait

func (q *Queue) Wait() *Message

Wait ...

type ReadPacker

type ReadPacker interface {
	Unpack(reader io.Reader) (err error)
}

ReadPacker ...

type ReadWritePacker

type ReadWritePacker interface {
	ReadPacker
	WritePacker
}

ReadWritePacker ...

type RecvCallbackFunc

type RecvCallbackFunc func(message *Message) ([]byte, bool, error)

RecvCallbackFunc ...

type RequestStatus

type RequestStatus uint32

RequestStatus ...

type SendCallback

type SendCallback func(packer ReadPacker)

SendCallback ...

type Session

type Session uint32

Session ...

type SumLength

type SumLength uint16

SumLength ...

type Type added in v0.0.21

type Type uint8

Type ...

const (
	// TypeRequest ...
	TypeRequest Type = iota + 1
	// TypeResponse ...
	TypeResponse
	// TypeFailed ...
	TypeFailed
	// TypeClose ...
	TypeClose
)

Version //4

type Version

type Version [4]byte

Version ...

var DefaultVersion Version = [4]byte{'v', 0, 0, 1}

DefaultVersion ...

func ParseVersion

func ParseVersion(s string) (Version, error)

ParseVersion ...

func (Version) Compare

func (v Version) Compare(version Version) int

Compare ...

func (Version) String

func (v Version) String() string

String ...

type WritePacker

type WritePacker interface {
	Pack(writer io.Writer) (err error)
}

WritePacker ...

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL