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