https://github.com/godcong/scdt
https://github.com/godcong/scdt
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/godcong/scdt
- Owner: godcong
- License: mit
- Created: 2020-06-23T07:00:16.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-08-21T08:24:33.000Z (almost 5 years ago)
- Last Synced: 2025-01-26T08:11:25.234Z (5 months ago)
- Language: Go
- Size: 154 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
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 dataserver:
```go
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
```go
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
```go
//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
})
```