miners.go raw

   1  // +build !nominers
   2  
   3  package launchers
   4  
   5  import (
   6  	"fmt"
   7  	"net/rpc"
   8  	"os"
   9  
  10  	"github.com/p9c/p9/pkg/log"
  11  	"github.com/p9c/p9/cmd/kopach"
  12  	"github.com/p9c/p9/cmd/kopach/worker"
  13  	"github.com/p9c/p9/pod/state"
  14  
  15  	"github.com/p9c/p9/pkg/interrupt"
  16  
  17  	"github.com/p9c/p9/pkg/chaincfg"
  18  	"github.com/p9c/p9/pkg/fork"
  19  )
  20  
  21  // Kopach runs the kopach miner
  22  func Kopach(ifc interface{}) (e error) {
  23  	var cx *state.State
  24  	var ok bool
  25  	if cx, ok = ifc.(*state.State); !ok {
  26  		return fmt.Errorf("cannot run without a state")
  27  	}
  28  	// log.AppColorizer = color.Bit24(255, 128, 128, false).Sprint
  29  	// log.App = "kopach"
  30  	I.Ln("starting up kopach standalone miner for parallelcoin")
  31  	D.Ln(os.Args)
  32  	// podconfig.Configure(cx, true)
  33  	if cx.ActiveNet.Name == chaincfg.TestNet3Params.Name {
  34  		fork.IsTestnet = true
  35  	}
  36  	defer cx.KillAll.Q()
  37  	e = kopach.Run(cx)
  38  	<-interrupt.HandlersDone
  39  	D.Ln("kopach main finished")
  40  	return
  41  }
  42  
  43  func Worker(ifc interface{}) (e error) {
  44  	var cx *state.State
  45  	var ok bool
  46  	if cx, ok = ifc.(*state.State); !ok {
  47  		return fmt.Errorf("cannot run without a state")
  48  	}
  49  	// I.Ln(cx.Config.ExtraArgs)
  50  	if len(cx.Config.ExtraArgs) > 1 {
  51  		if os.Args[3] == chaincfg.TestNet3Params.Name {
  52  			fork.IsTestnet = true
  53  		}
  54  	}
  55  	if len(os.Args) > 2 {
  56  		log.SetLogLevel(os.Args[4])
  57  	}
  58  	D.Ln("miner worker starting")
  59  	w, conn := worker.New(cx.Config.ExtraArgs[0], cx.KillAll,
  60  		uint64(cx.Config.UUID.V()))
  61  	e = rpc.Register(w)
  62  	if e != nil {
  63  		D.Ln(e)
  64  		return e
  65  	}
  66  	D.Ln("starting up worker IPC")
  67  	rpc.ServeConn(conn)
  68  	D.Ln("stopping worker IPC")
  69  	D.Ln("finished")
  70  	return nil
  71  }
  72