90 lines
1.9 KiB
Markdown
90 lines
1.9 KiB
Markdown
|
# go-msgio - Message IO
|
||
|
|
||
|
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai)
|
||
|
[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/)
|
||
|
[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p)
|
||
|
[![codecov](https://codecov.io/gh/libp2p/go-libp2p-netutil/branch/master/graph/badge.svg)](https://codecov.io/gh/libp2p/go-msgio)
|
||
|
[![Travis CI](https://travis-ci.org/libp2p/go-libp2p-netutil.svg?branch=master)](https://travis-ci.org/libp2p/go-msgio)
|
||
|
[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io)
|
||
|
|
||
|
This is a simple package that helps read and write length-delimited slices. It's helpful for building wire protocols.
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
### Reading
|
||
|
|
||
|
```go
|
||
|
import "github.com/libp2p/go-msgio"
|
||
|
rdr := ... // some reader from a wire
|
||
|
mrdr := msgio.NewReader(rdr)
|
||
|
|
||
|
for {
|
||
|
msg, err := mrdr.ReadMsg()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
doSomething(msg)
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Writing
|
||
|
|
||
|
```go
|
||
|
import "github.com/libp2p/go-msgio"
|
||
|
wtr := genReader()
|
||
|
mwtr := msgio.NewWriter(wtr)
|
||
|
|
||
|
for {
|
||
|
msg := genMessage()
|
||
|
err := mwtr.WriteMsg(msg)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Duplex
|
||
|
|
||
|
```go
|
||
|
import "github.com/libp2p/go-msgio"
|
||
|
rw := genReadWriter()
|
||
|
mrw := msgio.NewReadWriter(rw)
|
||
|
|
||
|
for {
|
||
|
msg, err := mrdr.ReadMsg()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// echo it back :)
|
||
|
err = mwtr.WriteMsg(msg)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Channels
|
||
|
|
||
|
```go
|
||
|
import "github.com/libp2p/go-msgio"
|
||
|
rw := genReadWriter()
|
||
|
rch := msgio.NewReadChannel(rw)
|
||
|
wch := msgio.NewWriteChannel(rw)
|
||
|
|
||
|
for {
|
||
|
msg, err := <-rch
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// echo it back :)
|
||
|
wch<- rw
|
||
|
}
|
||
|
```
|
||
|
|
||
|
---
|
||
|
|
||
|
The last gx published version of this module was: 0.0.6: QmcxL9MDzSU5Mj1GcWZD8CXkAFuJXjdbjotZ93o371bKSf
|