func NewKin(join XKin) (k *Kin, xkin ExoKin, add, rmv <-chan KinXID) {
	k = &Kin{
		rtr:   NewRotor(),
		ach:   make(chan KinXID, 3*Spread),
		dch:   make(chan KinXID, 3*Spread),
		topic: make(map[string]FolkXID),
	}
	// Create a KinXID for this system.
	k.kinxid = KinXID(XID{
		X:  circuit.PermRef(ExoKin{k}),
		ID: lang.ComputeReceiverID(k),
	})
	if join == nil {
		return k, ExoKin{k}, k.ach, k.dch
	}
	// Join peer
	defer func() {
		if r := recover(); r != nil {
			log.Fatalf("joining (%s)", r)
		}
	}()
	var w bytes.Buffer
	for _, peer := range (YKin{ KinXID{ X: join }}).Join() {
		k.open(peer)
		w.WriteString(peer.X.Addr().WorkerID().String())
		w.WriteByte(' ')
	}
	log.Println("Initial peers:", w.String())
	return k, ExoKin{k}, k.ach, k.dch
}
// NewKin creates a new kinfolk system server, which optionally
// joins the kinfolk network of join.
//
// Additions and removals of new members to the circuit system
// will be announced over add and rmv. These two channels must 
// be consumed by the user.
NewKin creates a new kinfolk system server, which optionally
joins the kinfolk network of join.

Additions and removals of new members to the circuit system
will be announced over add and rmv. These two channels must
be consumed by the user.
// NewKin creates a new kinfolk system server which optionally // joins the kinfolk network of join . // // Additions and removals of new members to the circuit system // will be announced over add and rmv . These two channels must // be consumed by the user .
func NewKin(join XKin) (k *Kin, xkin ExoKin, add, rmv <-chan KinXID) {
	k = &Kin{
		rtr:   NewRotor(),
		ach:   make(chan KinXID, 3*Spread),
		dch:   make(chan KinXID, 3*Spread),
		topic: make(map[string]FolkXID),
	}
	k.kinxid = KinXID(XID{
		X:  circuit.PermRef(ExoKin{k}),
		ID: lang.ComputeReceiverID(k),
	})
	if join == nil {
		return k, ExoKin{k}, k.ach, k.dch
	}
	defer func() {
		if r := recover(); r != nil {
			log.Fatalf("joining (%s)", r)
		}
	}()
	var w bytes.Buffer
	for _, peer := range (YKin{ KinXID{ X: join }}).Join() {
		k.open(peer)
		w.WriteString(peer.X.Addr().WorkerID().String())
		w.WriteByte(' ')
	}
	log.Println("Initial peers:", w.String())
	return k, ExoKin{k}, k.ach, k.dch
}
func NewKin ( join XKin ) ( k * Kin , xkin ExoKin , add , rmv <- chan KinXID ) { k = & Kin { rtr : NewRotor ( ) , ach : make ( chan KinXID , 3 * Spread ) , dch : make ( chan KinXID , 3 * Spread ) , topic : make ( map [ string ] FolkXID ) , } k . kinxid = KinXID ( XID { X : circuit . PermRef ( ExoKin { k } ) , ID : lang . ComputeReceiverID ( k ) , } ) if join == nil { return k , ExoKin { k } , k . ach , k . dch } defer func ( ) { if r := recover ( ) ; r != nil { log . Fatalf ( " " , r ) } } ( ) var w bytes . Buffer for _ , peer := range ( YKin { KinXID { X : join } } ) . Join ( ) { k . open ( peer ) w . WriteString ( peer . X . Addr ( ) . WorkerID ( ) . String ( ) ) w . WriteByte ( ' ' ) } log . Println ( " " , w . String ( ) ) return k , ExoKin { k } , k . ach , k . dch }
NewKin creates a new kinfolk system server, which optionally
joins the kinfolk network of join.
NewKin creates a new kinfolk system server which optionally joins the kinfolk network of join .
// Create a KinXID for this system. // Join peer