Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
77 lines (69 sloc) 1.89 KB
package EventBus
import (
// NetworkBus - object capable of subscribing to remote event buses in addition to remote event
// busses subscribing to it's local event bus. Compoed of a server and client
type NetworkBus struct {
service *NetworkBusService
sharedBus Bus
address string
path string
// NewNetworkBus - returns a new network bus object at the server address and path
func NewNetworkBus(address, path string) *NetworkBus {
bus := new(NetworkBus)
bus.sharedBus = New()
bus.Server = NewServer(address, path, bus.sharedBus)
bus.Client = NewClient(address, path, bus.sharedBus)
bus.service = &NetworkBusService{&sync.WaitGroup{}, false}
bus.address = address
bus.path = path
return bus
// EventBus - returns wrapped event bus
func (networkBus *NetworkBus) EventBus() Bus {
return networkBus.sharedBus
// NetworkBusService - object capable of serving the network bus
type NetworkBusService struct {
wg *sync.WaitGroup
started bool
// Start - helper method to serve a network bus service
func (networkBus *NetworkBus) Start() error {
var err error
service := networkBus.service
clientService := networkBus.Client.service
serverService := networkBus.Server.service
if !service.started {
server := rpc.NewServer()
server.RegisterName("ServerService", serverService)
server.RegisterName("ClientService", clientService)
server.HandleHTTP(networkBus.path, "/debug"+networkBus.path)
l, e := net.Listen("tcp", networkBus.address)
if e != nil {
err = fmt.Errorf("listen error: %v", e)
go http.Serve(l, nil)
} else {
err = errors.New("Server bus already started")
return err
// Stop - signal for the service to stop serving
func (networkBus *NetworkBus) Stop() {
service := networkBus.service
if service.started {
service.started = false
You can’t perform that action at this time.