Refactor client codes to use similar, standardized API
This commit is contained in:
@ -13,8 +13,8 @@ func main() {
|
||||
}
|
||||
defer pipeio.Close()
|
||||
|
||||
pipeio.HandleMessage(func(msg []byte) {
|
||||
pipeio.Reader.SetMessageHandler(func(msg []byte) {
|
||||
pipeio.Writer.SendMessage(msg)
|
||||
})
|
||||
pipeio.Run()
|
||||
pipeio.Reader.Run()
|
||||
}
|
@ -9,8 +9,11 @@ import (
|
||||
type pipeReader struct {
|
||||
pipe *os.File
|
||||
scanner *bufio.Scanner
|
||||
messageHandler messageHandlerFunc
|
||||
}
|
||||
|
||||
type messageHandlerFunc func([]byte)
|
||||
|
||||
func NewPipeReader(pipePath string) (*pipeReader, error) {
|
||||
pipe, err := os.Open(pipePath)
|
||||
scanner := bufio.NewScanner(pipe)
|
||||
@ -21,9 +24,28 @@ func NewPipeReader(pipePath string) (*pipeReader, error) {
|
||||
return &pipeReader{
|
||||
pipe: pipe,
|
||||
scanner: scanner,
|
||||
messageHandler: func([]byte){},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (preader *pipeReader) Close() {
|
||||
preader.pipe.Close()
|
||||
}
|
||||
|
||||
func (preader *pipeReader) SetMessageHandler(fun messageHandlerFunc) {
|
||||
preader.messageHandler = fun
|
||||
}
|
||||
|
||||
func (preader *pipeReader) Run() {
|
||||
for {
|
||||
msg := preader.RecvMessage()
|
||||
if msg == nil {
|
||||
break
|
||||
}
|
||||
preader.messageHandler(msg)
|
||||
}
|
||||
}
|
||||
|
||||
func (preader *pipeReader) RecvMessage() []byte {
|
||||
if preader.scanner.Scan() {
|
||||
return preader.scanner.Bytes()
|
||||
@ -31,10 +53,6 @@ func (preader *pipeReader) RecvMessage() []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (preader *pipeReader) Close() {
|
||||
preader.pipe.Close()
|
||||
}
|
||||
|
||||
|
||||
type pipeWriter struct {
|
||||
pipe *os.File
|
||||
@ -60,11 +78,8 @@ func (pwriter *pipeWriter) SendMessage(msg []byte) {
|
||||
type pipeIO struct {
|
||||
Reader pipeReader
|
||||
Writer pipeWriter
|
||||
handleMessage handleMessageFunc
|
||||
}
|
||||
|
||||
type handleMessageFunc func([]byte)
|
||||
|
||||
func NewPipeIO(inPipePath, outPipePath string) (*pipeIO, error) {
|
||||
reader, err := NewPipeReader(inPipePath)
|
||||
if err != nil {
|
||||
@ -77,7 +92,6 @@ func NewPipeIO(inPipePath, outPipePath string) (*pipeIO, error) {
|
||||
return &pipeIO{
|
||||
Reader: *reader,
|
||||
Writer: *writer,
|
||||
handleMessage: func([]byte){},
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -85,17 +99,3 @@ func (pipeio *pipeIO) Close() {
|
||||
pipeio.Reader.Close()
|
||||
pipeio.Writer.Close()
|
||||
}
|
||||
|
||||
func (pipeio *pipeIO) Run() {
|
||||
for {
|
||||
msg := pipeio.Reader.RecvMessage()
|
||||
if msg == nil {
|
||||
break
|
||||
}
|
||||
pipeio.handleMessage(msg)
|
||||
}
|
||||
}
|
||||
|
||||
func (pipeio *pipeIO) HandleMessage(fun handleMessageFunc) {
|
||||
pipeio.handleMessage = fun
|
||||
}
|
||||
|
Reference in New Issue
Block a user