github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/rpc/stdio.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:42</date> 10 //</624450109622456320> 11 12 13 package rpc 14 15 import ( 16 "context" 17 "errors" 18 "net" 19 "os" 20 "time" 21 ) 22 23 //dialstdio在stdin/stdout上创建客户端。 24 func DialStdIO(ctx context.Context) (*Client, error) { 25 return newClient(ctx, func(_ context.Context) (net.Conn, error) { 26 return stdioConn{}, nil 27 }) 28 } 29 30 type stdioConn struct{} 31 32 func (io stdioConn) Read(b []byte) (n int, err error) { 33 return os.Stdin.Read(b) 34 } 35 36 func (io stdioConn) Write(b []byte) (n int, err error) { 37 return os.Stdout.Write(b) 38 } 39 40 func (io stdioConn) Close() error { 41 return nil 42 } 43 44 func (io stdioConn) LocalAddr() net.Addr { 45 return &net.UnixAddr{Name: "stdio", Net: "stdio"} 46 } 47 48 func (io stdioConn) RemoteAddr() net.Addr { 49 return &net.UnixAddr{Name: "stdio", Net: "stdio"} 50 } 51 52 func (io stdioConn) SetDeadline(t time.Time) error { 53 return &net.OpError{Op: "set", Net: "stdio", Source: nil, Addr: nil, Err: errors.New("deadline not supported")} 54 } 55 56 func (io stdioConn) SetReadDeadline(t time.Time) error { 57 return &net.OpError{Op: "set", Net: "stdio", Source: nil, Addr: nil, Err: errors.New("deadline not supported")} 58 } 59 60 func (io stdioConn) SetWriteDeadline(t time.Time) error { 61 return &net.OpError{Op: "set", Net: "stdio", Source: nil, Addr: nil, Err: errors.New("deadline not supported")} 62 } 63