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