github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/signer/core/stdioui.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  //</624450110486482944>
    11  
    12  //
    13  
    14  package core
    15  
    16  import (
    17  	"context"
    18  	"sync"
    19  
    20  	"github.com/ethereum/go-ethereum/internal/ethapi"
    21  	"github.com/ethereum/go-ethereum/log"
    22  	"github.com/ethereum/go-ethereum/rpc"
    23  )
    24  
    25  type StdIOUI struct {
    26  	client rpc.Client
    27  	mu     sync.Mutex
    28  }
    29  
    30  func NewStdIOUI() *StdIOUI {
    31  	log.Info("NewStdIOUI")
    32  client, err := rpc.DialContext(context.Background(), "stdio://“”
    33  	if err != nil {
    34  		log.Crit("Could not create stdio client", "err", err)
    35  	}
    36  	return &StdIOUI{client: *client}
    37  }
    38  
    39  //调度通过stdio发送请求
    40  func (ui *StdIOUI) dispatch(serviceMethod string, args interface{}, reply interface{}) error {
    41  	err := ui.client.Call(&reply, serviceMethod, args)
    42  	if err != nil {
    43  		log.Info("Error", "exc", err.Error())
    44  	}
    45  	return err
    46  }
    47  
    48  func (ui *StdIOUI) ApproveTx(request *SignTxRequest) (SignTxResponse, error) {
    49  	var result SignTxResponse
    50  	err := ui.dispatch("ApproveTx", request, &result)
    51  	return result, err
    52  }
    53  
    54  func (ui *StdIOUI) ApproveSignData(request *SignDataRequest) (SignDataResponse, error) {
    55  	var result SignDataResponse
    56  	err := ui.dispatch("ApproveSignData", request, &result)
    57  	return result, err
    58  }
    59  
    60  func (ui *StdIOUI) ApproveExport(request *ExportRequest) (ExportResponse, error) {
    61  	var result ExportResponse
    62  	err := ui.dispatch("ApproveExport", request, &result)
    63  	return result, err
    64  }
    65  
    66  func (ui *StdIOUI) ApproveImport(request *ImportRequest) (ImportResponse, error) {
    67  	var result ImportResponse
    68  	err := ui.dispatch("ApproveImport", request, &result)
    69  	return result, err
    70  }
    71  
    72  func (ui *StdIOUI) ApproveListing(request *ListRequest) (ListResponse, error) {
    73  	var result ListResponse
    74  	err := ui.dispatch("ApproveListing", request, &result)
    75  	return result, err
    76  }
    77  
    78  func (ui *StdIOUI) ApproveNewAccount(request *NewAccountRequest) (NewAccountResponse, error) {
    79  	var result NewAccountResponse
    80  	err := ui.dispatch("ApproveNewAccount", request, &result)
    81  	return result, err
    82  }
    83  
    84  func (ui *StdIOUI) ShowError(message string) {
    85  	err := ui.dispatch("ShowError", &Message{message}, nil)
    86  	if err != nil {
    87  		log.Info("Error calling 'ShowError'", "exc", err.Error(), "msg", message)
    88  	}
    89  }
    90  
    91  func (ui *StdIOUI) ShowInfo(message string) {
    92  	err := ui.dispatch("ShowInfo", Message{message}, nil)
    93  	if err != nil {
    94  		log.Info("Error calling 'ShowInfo'", "exc", err.Error(), "msg", message)
    95  	}
    96  }
    97  func (ui *StdIOUI) OnApprovedTx(tx ethapi.SignTransactionResult) {
    98  	err := ui.dispatch("OnApprovedTx", tx, nil)
    99  	if err != nil {
   100  		log.Info("Error calling 'OnApprovedTx'", "exc", err.Error(), "tx", tx)
   101  	}
   102  }
   103  
   104  func (ui *StdIOUI) OnSignerStartup(info StartupInfo) {
   105  	err := ui.dispatch("OnSignerStartup", info, nil)
   106  	if err != nil {
   107  		log.Info("Error calling 'OnSignerStartup'", "exc", err.Error(), "info", info)
   108  	}
   109  }
   110  func (ui *StdIOUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) {
   111  	var result UserInputResponse
   112  	err := ui.dispatch("OnInputRequired", info, &result)
   113  	if err != nil {
   114  		log.Info("Error calling 'OnInputRequired'", "exc", err.Error(), "info", info)
   115  	}
   116  	return result, err
   117  }
   118