Refactor client codes to use similar, standardized API

This commit is contained in:
Kristóf Tóth
2019-04-11 18:30:25 +02:00
parent 74e08fd052
commit d28e90862d
16 changed files with 226 additions and 161 deletions

View File

@ -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()
}

View File

@ -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
}