コード例 #1
0
ファイル: msg_svr.go プロジェクト: Ehuos/gopush-cluster
func InitMsgSvrClient() error {
	var err error
	MsgSvrClient, err = rpc.Dial(Conf.MsgSvr.Network, Conf.MsgSvr.Addr)
	if err != nil {
		return err
	}

	// rpc Ping
	go func() {
		for {
			reply := 0
			if err := MsgSvrClient.Call("MessageRPC.Ping", 0, &reply); err != nil {
				Log.Error("rpc.Call(\"MessageRPC.Ping\") failed (%v)", err)
				rpcTmp, err := rpc.Dial("tcp", Conf.Addr)
				if err != nil {
					Log.Error("rpc.Dial(\"tcp\", %s) failed (%v)", Conf.Addr, err)
					time.Sleep(time.Duration(Conf.MsgSvr.Retry) * time.Second)
					Log.Warn("rpc reconnect \"%s\" after %d second", Conf.Addr, Conf.MsgSvr.Retry)
				} else {
					Log.Info("rpc client reconnect \"%s\" ok", Conf.Addr)
					MsgSvrClient = rpcTmp
				}

				continue
			}

			// every one second send a heartbeat ping
			Log.Debug("rpc ping ok")
			time.Sleep(time.Duration(Conf.MsgSvr.Heartbeat) * time.Second)
		}
	}()

	return nil
}
コード例 #2
0
func (m *mGocode) Call() (interface{}, string) {
	e := ""
	res := M{}
	c, err := rpc.Dial("tcp", mGocodeAddr)
	if err != nil {
		if serveErr := mGocodeServe(m); serveErr != nil {
			return res, "Error starting gocode server: " + serveErr.Error()
		}

		for i := 0; err != nil && i < 5; i += 1 {
			time.Sleep(20 * time.Millisecond)
			c, err = rpc.Dial("tcp", mGocodeAddr)
		}

		if err != nil {
			return res, "Error connecting to gocode server: " + err.Error()
		}
	}
	defer c.Close()

	switch m.cmd {
	case "set":
		for k, v := range m.Set {
			mGocodeCmdSet(c, k, v)
		}
		res, e = mGocodeCmdSet(c, "\x00", "\x00")
	case "complete":
		pos := 0
		if m.Complete.Src == "" {
			// this is here for testing, the client should always send the src
			s, _ := ioutil.ReadFile(m.Complete.Fn)
			m.Complete.Src = string(s)
		}

		for i, _ := range m.Complete.Src {
			pos += 1
			if pos >= m.Complete.Pos {
				pos = i
				break
			}
		}
		res, e = mGocodeCmdComplete(c, m.Complete.Fn, []byte(m.Complete.Src), pos)
	default:
		panic("Unsupported command: gocode: " + m.cmd)
	}

	return res, e
}
コード例 #3
0
ファイル: web.go プロジェクト: aart/poc
func getTransportOrder(w http.ResponseWriter, r *http.Request) {

	u := r.URL
	q := u.Query()
	in := q.Get("id")

	client, err := rpc.Dial("tcp", "localhost:42586")
	if err != nil {
		log.Fatal(err)
	}

	var out pack.TransportOrder

	err = client.Call("Listener.GetTransportOrderById", in, &out)
	if err != nil {
		log.Fatal(err)
	}

	log.Println("web layer - getTransportOrder: ", out)

	b, err := json.MarshalIndent(out, "", "   ")
	if err != nil {
		log.Fatal(err)
	}
	io.WriteString(w, string(b))

}
コード例 #4
0
ファイル: rpc_test.go プロジェクト: hongchaodeng/raccoon
func TestEcho(t *testing.T) {
	routerAddr := "127.0.0.1:14817"

	r, _ := New("id", routerAddr, "")
	err := r.Start()
	if err != nil {
		t.Fatal("router start:", err)
	}
	defer r.Stop()

	time.Sleep(time.Millisecond * 50)

	client, err := rpc.Dial("tcp", ":14817")
	if err != nil {
		t.Fatal("dialing:", err)
	}

	reply := new(Reply)
	err = client.Call("RouterRPC.Echo", "hello router!", reply)
	if err != nil {
		t.Fatal("router rpc:", err)
	}

	assert.Equal(t, reply.Value, "hello router!")
}
コード例 #5
0
ファイル: transport.go プロジェクト: Hellblazer/cockroach
func (lt *localRPCTransport) getClient(id proto.RaftNodeID) (*rpc.Client, error) {
	lt.mu.Lock()
	defer lt.mu.Unlock()

	select {
	case <-lt.closed:
		return nil, util.Errorf("transport is closed")
	default:
	}

	client, ok := lt.clients[id]
	if ok {
		return client, nil
	}

	listener, ok := lt.listeners[id]
	if !ok {
		return nil, util.Errorf("unknown peer %v", id)
	}
	address := listener.Addr().String()

	// If this wasn't test code we wouldn't want to call Dial while holding the lock.
	client, err := rpc.Dial("tcp", address)
	if err != nil {
		return nil, err
	}
	lt.clients[id] = client
	return client, err
}
コード例 #6
0
func TestRunFailure(t *testing.T) {
	// Create a queue & start the resource
	q := Queue{authToken: "FailureTest"}
	l := startRPCOnce("tcp", addr, &q)
	defer l.Close()

	// Add the failure tool
	tool := new(simpleFailerTooler)
	tool.SetUUID(uuid.New())
	q.tools = append(q.tools, tool)

	// Build the RPC client
	client, err := rpc.Dial("tcp", addr)
	if err != nil {
		t.Fatal("Error dailing RPC servers.", err)
	}

	// Build the job to send to the simpleFailureTask
	params := map[string]string{"failFunc": "Run"}
	job := common.NewJob(tool.UUID(), "Failure Test", "GoTestSuite", params)

	// Try and create the job... we should get a failure
	call := common.RPCCall{Auth: "FailureTest", Job: job}
	err = client.Call("Queue.AddTask", call, nil)
	if err == nil {
		t.Fatal("Failure task's error was not returned.")
	}
}
コード例 #7
0
ファイル: main.go プロジェクト: rif/golang-stuff
// jujuCMain uses JUJU_CONTEXT_ID and JUJU_AGENT_SOCKET to ask a running unit agent
// to execute a Command on our behalf. Individual commands should be exposed
// by symlinking the command name to this executable.
func jujuCMain(commandName string, args []string) (code int, err error) {
	code = 1
	contextId, err := getenv("JUJU_CONTEXT_ID")
	if err != nil {
		return
	}
	dir, err := getwd()
	if err != nil {
		return
	}
	req := jujuc.Request{
		ContextId:   contextId,
		Dir:         dir,
		CommandName: commandName,
		Args:        args[1:],
	}
	socketPath, err := getenv("JUJU_AGENT_SOCKET")
	if err != nil {
		return
	}
	client, err := rpc.Dial("unix", socketPath)
	if err != nil {
		return
	}
	defer client.Close()
	var resp jujuc.Response
	err = client.Call("Jujuc.Main", req, &resp)
	if err != nil {
		return
	}
	os.Stdout.Write(resp.Stdout)
	os.Stderr.Write(resp.Stderr)
	return resp.Code, nil
}
コード例 #8
0
func TestProvisionerRPC(t *testing.T) {
	assert := asserts.NewTestingAsserts(t, true)

	// Create the interface to test
	p := new(testProvisioner)

	// Start the server
	server := rpc.NewServer()
	RegisterProvisioner(server, p)
	address := serveSingleConn(server)

	// Create the client over RPC and run some methods to verify it works
	client, err := rpc.Dial("tcp", address)
	assert.Nil(err, "should be able to connect")

	// Test Prepare
	config := 42
	pClient := Provisioner(client)
	pClient.Prepare(config)
	assert.True(p.prepareCalled, "prepare should be called")
	assert.Equal(p.prepareConfigs, []interface{}{42}, "prepare should be called with right arg")

	// Test Provision
	ui := &testUi{}
	comm := new(packer.MockCommunicator)
	pClient.Provision(ui, comm)
	assert.True(p.provCalled, "provision should be called")

	p.provUi.Say("foo")
	assert.True(ui.sayCalled, "say should be called")
}
コード例 #9
0
ファイル: tcpclirpc.go プロジェクト: zonesan/golang
func main() {
	if len(os.Args) != 2 {
		fmt.Printf("Usage: %s server:port\n", os.Args[0])
		os.Exit(1)
	}

	service := os.Args[1]

	client, err := rpc.Dial("tcp", service)
	if err != nil {
		log.Fatal("Dialing:", err)
	}

	args := Args{17, 8}
	var reply int

	err = client.Call("Arith.Multiply", args, &reply)
	if err != nil {
		log.Fatal("arith error", err)
	}
	fmt.Printf("Arith: %d * %d = %d\n", args.A, args.B, reply)

	var quot Quotient
	err = client.Call("Arith.Divide", args, &quot)
	if err != nil {
		log.Fatal("arith error", err)
	}
	fmt.Printf("Arith: %d / %d = %d, remainder %d\n", args.A, args.B, quot.Quo, quot.Rem)

}
コード例 #10
0
func (self *Application) ExecClient() (result bool) {
	if flag.NArg() == 0 {
		ShowApplicationUsage()
		return false
	}

	rpcClient, err := rpc.Dial(GetServiceSocket(self.tcpPort))
	if err != nil {
		fmt.Fprintf(os.Stderr, "Cannot open RPC connection: %v\n", err)
		return false
	}

	switch flag.Arg(0) {
	case "close":
		ClientCloseService(rpcClient)
	case "reload":
		ClientReloadService(rpcClient)
	case "scan":
		if flag.NArg() != 2 {
			ShowApplicationUsage()
			return false
		}
		inputPath, err := filepath.Abs(flag.Arg(1))
		if err != nil {
			fmt.Fprintf(os.Stderr, "Cannot get full path from '%s'\n", flag.Arg(1))
			return false
		}
		result := ClientScanEmotions(rpcClient, inputPath)
		fmt.Fprintf(os.Stdout, "Text has %d words, %.2f%% positive and %.2f%% negative\n", result.WordCount, result.PercentPositive, result.PercentNegative)
	default:
		ShowApplicationUsage()
		return false
	}
	return true
}
コード例 #11
0
func GetTradeProfile() {
	var InputFromUser int
	InputFromUser = 0
	fmt.Println(InputFromUser)
	c, err := rpc.Dial("tcp", "127.0.0.1:9999")

	if err != nil {
		fmt.Println(err)
		return
	}

	if InputFromUser == 2 {
		Sr1.TradeId = 1
		fmt.Println("Second function here")
		err = c.Call("Server.GetTradeProfile", Sr1, &Sresp)
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println("Trade ID: ", Sresp.TradeId, " and Remaining amount: ", Sresp.UnvestedAmount)

		for index := 0; index < len(Sresp.NumberOfStocks); index++ {
			if Sresp.Name[index] != "" {
				fmt.Println("Name of Stock", Sresp.Name[index], " Number of Stocks", Sresp.NumberOfStocks[index], " Value of Stock", Sresp.ProfitLoss[index], Sresp.StockValue[index])
			}
		}

		fmt.Println("Current total value ", Sresp.CurrentMarketValue)
	}

}
コード例 #12
0
ファイル: tcp_test.go プロジェクト: pombredanne/bar
func Test_Proto_Binary_Large_Timeout(t *testing.T) {
	t.Skip()
	srv := &binaryTestServer{&baseTestServer{}}
	port, err := srv.listen()
	assert.NoError(t, err)
	srv.start()
	defer srv.Stop()

	client, err := rpc.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", port))
	assert.NoError(t, err)
	defer client.Close()

	var res, res1 TestMessage
	req := TestMessage{
		"12345678910",
		[]byte(strings.Repeat("0", 1024*1024)),
	}
	err = client.Call("ServiceFixture.Ping", &req, &res)
	assert.NoError(t, err)
	assert.Equal(t, req, res)

	time.Sleep(time.Second)
	err = client.Call("ServiceFixture.Ping", &req, &res1)
	assert.NoError(t, err)
	assert.Equal(t, req, res1)
}
コード例 #13
0
ファイル: client.go プロジェクト: 443752009/go-web-foundation
func main() {
	if len(os.Args) != 2 {
		fmt.Println("Usage: ", os.Args[0], "server:port")
		os.Exit(1)
	}
	service := os.Args[1]

	client, err := rpc.Dial("tcp", service)
	if err != nil {
		log.Fatal("dialing:", err)
	}
	// Synchronous call
	args := Args{17, 8}
	var reply int
	err = client.Call("Math.Multiply", args, &reply)
	if err != nil {
		log.Fatal("Math error:", err)
	}
	fmt.Printf("Math: %d*%d=%d\n", args.A, args.B, reply)

	var quot Quotient
	err = client.Call("Math.Divide", args, &quot)
	if err != nil {
		log.Fatal("Math error:", err)
	}
	fmt.Printf("Math: %d/%d=%d remainder %d\n", args.A, args.B, quot.Quo, quot.Rem)

}
コード例 #14
0
ファイル: tcp_test.go プロジェクト: pombredanne/bar
func Benchmark_Proto_Binary_Large(b *testing.B) {
	b.Skip()
	srv := &binaryTestServer{&baseTestServer{}}
	port, err := srv.listen()
	assert.NoError(b, err)
	srv.start()
	defer srv.Stop()

	client, err := rpc.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", port))
	assert.NoError(b, err)
	defer client.Close()

	b.Log(port)

	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		b.StartTimer()
		var res TestMessage
		req := TestMessage{
			"12345678910",
			[]byte(strings.Repeat("0", 1024*1024)),
		}
		err = client.Call("ServiceFixture.Ping", &req, &res)
		b.StopTimer()
		assert.NoError(b, err)
		assert.Equal(b, req, res)
		b.SetBytes(int64(len(req.Data) * 2))
	}
}
コード例 #15
0
func isLeader(rpc_port int) bool {
	client, err := rpc.Dial("tcp", "localhost"+":"+strconv.Itoa(rpc_port))

	reply := -1
	if err != nil {

		return false
	} else {

		I := 10

		errr := client.Call("RaftRPC.Phase", &I, &reply)
		if errr != nil {

			//fmt.Println("\nError comes")
			return false
		}
		client.Close()
	}
	//fmt.Printf("\n")
	//fmt.Printf("Rk="+strconv.Itoa(reply))
	if reply == 1 {
		//fmt.Printf("\nReturning true")
		return true
	}
	return false
}
コード例 #16
0
ファイル: client_simple.go プロジェクト: zhuangh/gorpc_trial
func main() {
	client, err := rpc.Dial("tcp", "localhost:42586")
	//client, err := rpc.Dial("tcp", "moore.ucsd.edu:42586")
	if err != nil {
		log.Fatal(err)
	}

	in := bufio.NewReader(os.Stdin)
	//in := bufio.NewReader("hello")
	for {

		fmt.Println("hi, please input so that I can send: ")
		line, _, err := in.ReadLine()
		if err != nil {
			log.Fatal(err)
		}
		var reply bool
		fmt.Println("hi")
		err = client.Call("Listener.GetLine", line, &reply)
		fmt.Println("GetLine: ", reply)
		if err != nil {
			log.Fatal(err)
		}
	}
}
コード例 #17
0
ファイル: client.go プロジェクト: chouqiu/weishenghuo
func do_client() int {
	addr := *g_disp_addr
	sock := "tcp"

	// client
	client, err := rpc.Dial(sock, addr)
	if err != nil {
		client, err = try_to_connect(sock, addr)
		if err != nil {
			fmt.Printf("%s\n", err.Error())
			return 1
		}
	}
	defer client.Close()

	if flag.NArg() > 0 {
		switch flag.Arg(0) {
		case "close":
			cmd_close(client)
		case "status":
			cmd_status(client)
		}
	}
	return 0
}
コード例 #18
0
ファイル: rpc.go プロジェクト: john-griffin/goreman
// command: run.
func run(cmd, proc string) error {
	client, err := rpc.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", *port))
	if err != nil {
		return err
	}
	defer client.Close()
	var ret string
	switch cmd {
	case "start":
		return client.Call("Goreman.Start", proc, &ret)
	case "stop":
		return client.Call("Goreman.Stop", proc, &ret)
	case "restart":
		return client.Call("Goreman.Restart", proc, &ret)
	case "list":
		err := client.Call("Goreman.List", "", &ret)
		fmt.Print(ret)
		return err
	case "dump":
		err := client.Call("Goreman.Dump", "", &ret)
		fmt.Print(ret)
		return err
	}
	return errors.New("Unknown command")
}
コード例 #19
0
func (cliConnection *cliConnection) callCliCommand(silently bool, args ...string) ([]string, error) {
	client, err := rpc.Dial("tcp", "127.0.0.1:"+cliConnection.cliServerPort)
	if err != nil {
		return []string{}, err
	}
	defer client.Close()

	var success bool

	client.Call("CliRpcCmd.DisableTerminalOutput", silently, &success)
	err = client.Call("CliRpcCmd.CallCoreCommand", args, &success)

	var cmdOutput []string
	outputErr := client.Call("CliRpcCmd.GetOutputAndReset", success, &cmdOutput)

	if err != nil {
		return cmdOutput, err
	} else if !success {
		return cmdOutput, errors.New("Error executing cli core command")
	}

	if outputErr != nil {
		return cmdOutput, errors.New("something completely unexpected happened")
	}
	return cmdOutput, nil
}
コード例 #20
0
ファイル: post_processor.go プロジェクト: B-Rich/packer
func (p *postProcessor) PostProcess(ui packer.Ui, a packer.Artifact) (packer.Artifact, bool, error) {
	server := rpc.NewServer()
	RegisterArtifact(server, a)
	RegisterUi(server, ui)

	var response PostProcessorProcessResponse
	if err := p.client.Call("PostProcessor.PostProcess", serveSingleConn(server), &response); err != nil {
		return nil, false, err
	}

	if response.Err != nil {
		return nil, false, response.Err
	}

	if response.RPCAddress == "" {
		return nil, false, nil
	}

	client, err := rpc.Dial("tcp", response.RPCAddress)
	if err != nil {
		return nil, false, err
	}

	return Artifact(client), response.Keep, nil
}
コード例 #21
0
ファイル: artifact_test.go プロジェクト: englishm/packer
func TestArtifactRPC(t *testing.T) {
	// Create the interface to test
	a := new(testArtifact)

	// Start the server
	server := rpc.NewServer()
	RegisterArtifact(server, a)
	address := serveSingleConn(server)

	// Create the client over RPC and run some methods to verify it works
	client, err := rpc.Dial("tcp", address)
	if err != nil {
		t.Fatalf("err: %s", err)
	}
	aClient := Artifact(client)

	// Test
	if aClient.BuilderId() != "bid" {
		t.Fatalf("bad: %s", aClient.BuilderId())
	}

	if !reflect.DeepEqual(aClient.Files(), []string{"a", "b"}) {
		t.Fatalf("bad: %#v", aClient.Files())
	}

	if aClient.Id() != "id" {
		t.Fatalf("bad: %s", aClient.Id())
	}

	if aClient.String() != "string" {
		t.Fatalf("bad: %s", aClient.String())
	}
}
コード例 #22
0
ファイル: post_processor.go プロジェクト: B-Rich/packer
func (p *PostProcessorServer) PostProcess(address string, reply *PostProcessorProcessResponse) error {
	client, err := rpc.Dial("tcp", address)
	if err != nil {
		return err
	}

	responseAddress := ""

	artifact, keep, err := p.p.PostProcess(&Ui{client}, Artifact(client))
	if err == nil && artifact != nil {
		server := rpc.NewServer()
		RegisterArtifact(server, artifact)
		responseAddress = serveSingleConn(server)
	}

	if err != nil {
		err = NewBasicError(err)
	}

	*reply = PostProcessorProcessResponse{
		Err:        err,
		Keep:       keep,
		RPCAddress: responseAddress,
	}

	return nil
}
コード例 #23
0
ファイル: rpc.go プロジェクト: yubo/gotty
func Call(serviceMethod string, args interface{}, reply interface{}) error {
	client, err := rpc.Dial("unix", GlobalOpt.UnixSocket)
	if err != nil {
		return err
	}
	return client.Call(serviceMethod, args, reply)
}
コード例 #24
0
ファイル: server_test.go プロジェクト: rif/golang-stuff
func (s *ServerSuite) Call(c *C, req jujuc.Request) (resp jujuc.Response, err error) {
	client, err := rpc.Dial("unix", s.sockPath)
	c.Assert(err, IsNil)
	defer client.Close()
	err = client.Call("Jujuc.Main", req, &resp)
	return resp, err
}
コード例 #25
0
ファイル: node.go プロジェクト: tjxn/cpsc_416_assign_3
// Main server loop.
func main() {
	runtime.GOMAXPROCS(runtime.NumCPU())
	checkArgs()

	kvAddr := os.Args[1]
	myID = os.Args[2]

	verbosePrintOnOff = true

	// Connect to the KV-service via RPC.
	var err error
	kvService, err = rpc.Dial("tcp", kvAddr)
	checkError(err)

	lastNum = 1
	leaderNum = 1
	registerNum = 1
	myIDNum = 1
	activeNodeKey = 1

	currentNodeKey = make(map[string]int)
	currentNodeNum = make(map[string]int)
	activeNodes = []string{}

	checkForLeader()

}
コード例 #26
0
ファイル: client.go プロジェクト: Zerak/gonote
func main() {
	client, err := rpc.Dial("tcp", "127.0.0.1:60000")
	if err != nil {
		fmt.Printf("dialing:%v\n", err)
		return
	}

	var args = "hello rpc"
	var reply string
	err = client.Call("RPC.Ping", args, &reply)
	if err != nil {
		fmt.Printf("RPC.Ping error:%v\n", err)
	} else {
		fmt.Printf("RPC.Ping: %v %v\n", args, reply)
	}

	//err = client.Go("DefaultAuther.Auth", 1, &reply, nil).Done
	//if err != nil {
	//	fmt.Printf("RPC.Auth error:%v\n", err)
	//} else {
	//	fmt.Printf("RPC.Auth: %v %v\n", args, reply)
	//}

	// ping
	tickJob(client)
}
コード例 #27
0
ファイル: rpc.go プロジェクト: lkj01010/chesssrv
func NewRpcClient(addr string) (c *RpcClient, err error) {
	var cli *rpc.Client
	if cli, err = rpc.Dial("tcp", addr); err != nil {
		return
	}
	return &RpcClient{cli}, nil
}
コード例 #28
0
ファイル: rpc_client_test.go プロジェクト: johnbellone/serf
// testRPCClient returns an RPCClient connected to an RPC server that
// serves only this connection.
func testRPCClient(t *testing.T) (*RPCClient, *Agent) {
	l, err := net.Listen("tcp", "127.0.0.1:0")
	if err != nil {
		t.Fatalf("err: %s", err)
	}

	agent := testAgent()
	server := rpc.NewServer()
	if err := registerEndpoint(server, agent); err != nil {
		l.Close()
		t.Fatalf("err: %s", err)
	}

	go func() {
		conn, err := l.Accept()
		l.Close()
		if err != nil {
			t.Fatalf("err: %s", err)
		}
		defer conn.Close()
		server.ServeConn(conn)
	}()

	rpcClient, err := rpc.Dial("tcp", l.Addr().String())
	if err != nil {
		t.Fatalf("err: %s", err)
	}

	return &RPCClient{Client: rpcClient}, agent
}
コード例 #29
0
ファイル: server.go プロジェクト: lkj01010/chesssrv
func NewServer() (*Server, error) {
	// connect dao server
dao:
	daocli, err := rpc.Dial("tcp", cfg.DaoAddr())
	if err != nil {
		log.Warningf("dao server connect fail(err=%+v), try again...", err.Error())
		time.Sleep(1 * time.Second)
		goto dao
	}

	ctrl := make(chan string, 10)
game:
	cli, err := fw.NewClient(cfg.GameAddr(), &gameCliModel{}, ctrl)
	if err != nil {
		log.Error(err.Error())
		log.Warningf("game server connect fail(err=%+v), try again...", err.Error())
		time.Sleep(1 * time.Second)
		goto game
	}
	go cli.Loop()

	// daemon routine (to be done), with "ctrl"
	// ......
	////////////////////

	// new server
	serverInst = &Server{
		dao:       daocli,
		gameCli:   cli,
		gameCtrl:  ctrl,
		connIdAcc: 0,
		agents:    make(map[int]*fw.Agent, 1000),
	}
	return serverInst, nil
}
コード例 #30
0
ファイル: client.go プロジェクト: willfaught/services
// NewClient makes a Client that uses h and dials address.
func NewClient(c Configuration, address string) (Client, error) {
	var client, err = rpc.Dial("tcp", address)
	if err != nil {
		return Client{}, err
	}
	return Client{Client: client, Configuration: c, Name: "Marketing"}, nil // Default receiver name is "Marketing".
}