github.com/koko1123/flow-go-1@v0.29.6/engine/common/splitter/network/example_test.go (about)

     1  package network_test
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  
     7  	"github.com/rs/zerolog"
     8  
     9  	splitterNetwork "github.com/koko1123/flow-go-1/engine/common/splitter/network"
    10  	"github.com/koko1123/flow-go-1/model/flow"
    11  	"github.com/koko1123/flow-go-1/network/channels"
    12  	testnet "github.com/koko1123/flow-go-1/utils/unittest/network"
    13  )
    14  
    15  func Example() {
    16  	// create a mock network
    17  	net := testnet.NewNetwork()
    18  
    19  	// create a splitter network
    20  	logger := zerolog.Nop()
    21  	splitterNet := splitterNetwork.NewNetwork(net, logger)
    22  
    23  	// generate a random origin ID
    24  	var id flow.Identifier
    25  	rand.Seed(0)
    26  	rand.Read(id[:])
    27  
    28  	// create engines
    29  	engineProcessFunc := func(engineID int) testnet.EngineProcessFunc {
    30  		return func(channel channels.Channel, originID flow.Identifier, event interface{}) error {
    31  			fmt.Printf("Engine %d received message: channel=%v, originID=%v, event=%v\n", engineID, channel, originID, event)
    32  			return nil
    33  		}
    34  	}
    35  	engine1 := testnet.NewEngine().OnProcess(engineProcessFunc(1))
    36  	engine2 := testnet.NewEngine().OnProcess(engineProcessFunc(2))
    37  	engine3 := testnet.NewEngine().OnProcess(engineProcessFunc(3))
    38  
    39  	// register engines with splitter network
    40  	channel := channels.Channel("foo-channel")
    41  	_, err := splitterNet.Register(channel, engine1)
    42  	if err != nil {
    43  		fmt.Println(err)
    44  	}
    45  	_, err = splitterNet.Register(channel, engine2)
    46  	if err != nil {
    47  		fmt.Println(err)
    48  	}
    49  	_, err = splitterNet.Register(channel, engine3)
    50  	if err != nil {
    51  		fmt.Println(err)
    52  	}
    53  
    54  	// send message to network
    55  	err = net.Send(channel, id, "foo")
    56  	if err != nil {
    57  		fmt.Println(err)
    58  	}
    59  
    60  	// Unordered output:
    61  	// Engine 1 received message: channel=foo-channel, originID=0194fdc2fa2ffcc041d3ff12045b73c86e4ff95ff662a5eee82abdf44a2d0b75, event=foo
    62  	// Engine 2 received message: channel=foo-channel, originID=0194fdc2fa2ffcc041d3ff12045b73c86e4ff95ff662a5eee82abdf44a2d0b75, event=foo
    63  	// Engine 3 received message: channel=foo-channel, originID=0194fdc2fa2ffcc041d3ff12045b73c86e4ff95ff662a5eee82abdf44a2d0b75, event=foo
    64  }