当前位置: 首页>>代码示例>>Golang>>正文


Golang etf.Atom函数代码示例

本文整理汇总了Golang中github.com/goerlang/etf.Atom函数的典型用法代码示例。如果您正苦于以下问题:Golang Atom函数的具体用法?Golang Atom怎么用?Golang Atom使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了Atom函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: HandleCall

func (rpcs *rpcRex) HandleCall(message *etf.Term, from *etf.Tuple) (reply *etf.Term) {
	nLog("REX: HandleCall: %#v, From: %#v", *message, *from)
	var replyTerm etf.Term
	valid := false
	switch req := (*message).(type) {
	case etf.Tuple:
		if len(req) > 0 {
			switch act := req[0].(type) {
			case etf.Atom:
				if string(act) == "call" {
					valid = true
					if fun, ok := rpcs.callMap[modFun{string(req[1].(etf.Atom)), string(req[2].(etf.Atom))}]; ok {
						replyTerm = fun(req[3].(etf.List))
					} else {
						replyTerm = etf.Term(etf.Tuple{etf.Atom("badrpc"), etf.Tuple{etf.Atom("EXIT"), etf.Tuple{etf.Atom("undef"), etf.List{etf.Tuple{req[1], req[2], req[3], etf.List{}}}}}})
					}
				}
			}
		}
	}
	if !valid {
		replyTerm = etf.Term(etf.Tuple{etf.Atom("badrpc"), etf.Atom("unknown")})
	}
	reply = &replyTerm
	return
}
开发者ID:ibmendoza,项目名称:node,代码行数:26,代码来源:rpc.go

示例2: rpcShutdown

// shutdown request
// takes no arguments
func (r *Relay) rpcShutdown(terms etf.List) etf.Term {
	if len(terms) != 0 {
		return etf.Term(etf.Tuple{etf.Atom("error"), etf.Atom("badarith")})
	}
	r.shutdown()
	r.shutdownChan <- struct{}{}
	return etf.Term(etf.Atom("ok"))
}
开发者ID:pik4ez,项目名称:ndrctl,代码行数:10,代码来源:node.go

示例3: HandleCall

// HandleCall handles incoming messages from `gen_server:call/2`, if returns non-nil term,
// then calling process have reply
// Call `gen_server:call({go_srv, [email protected]}, Message)` at Erlang node
func (gs *gonodeSrv) HandleCall(message *etf.Term, from *etf.Tuple) (reply *etf.Term) {
	log.Printf("GO_SRV: HandleCall: %#v, From: %#v", *message, *from)

	// Just create new term tuple where first element is atom 'ok', second 'go_reply' and third is original message
	replyTerm := etf.Term(etf.Tuple{etf.Atom("ok"), etf.Atom("go_reply"), *message})
	reply = &replyTerm
	return
}
开发者ID:lucas564985699,项目名称:node,代码行数:11,代码来源:gonode.go

示例4: main

func main() {
	// Parse CLI flags
	flag.Parse()

	setup_logging()
	write_pid()

	log.Println("node started")

	// Initialize new node with given name and cookie
	enode := node.NewNode(NodeName, Cookie)

	// Allow node be available on EpmdPort port
	err = enode.Publish(EpmdPort)
	if err != nil {
		log.Fatalf("Cannot publish: %s", err)
	}

	// Create channel to receive message when main process should be stopped
	completeChan := make(chan bool)

	// Initialize new instance of srv structure which implements Process behaviour
	eSrv := new(srv)

	// Spawn process with one arguments
	enode.Spawn(eSrv, completeChan)

	// RPC
	if EnableRPC {
		// Create closure
		eClos := func(terms etf.List) (r etf.Term) {
			r = etf.Term(etf.Tuple{etf.Atom("gonode"), etf.Atom("reply"), len(terms)})
			return
		}

		// Provide it to call via RPC with `rpc:call([email protected], go_rpc, call, [as, qwe])`
		err = enode.RpcProvide("go_rpc", "call", eClos)
		if err != nil {
			log.Printf("Cannot provide function to RPC: %s", err)
		}
	}

	// Wait to stop
	<-completeChan

	log.Println("node finished")

	return
}
开发者ID:edwardt,项目名称:erlang-golang-node,代码行数:49,代码来源:gonode.go

示例5: createDevice

func (r *Relay) createDevice(fsName, deviceName string,
	isSensor, isAffector bool) (etf.Atom, error) {
	fs, ok := r.fss[fsName]
	if !ok {
		return etf.Atom(""), errors.New("no such fs")
	}
	device, err := fs.CreateDevice(deviceName, isSensor, isAffector)
	if err != nil {
		return etf.Atom(""), err
	}
	dp := newDeviceProc(device)
	fullName := deviceName + "@" + fsName
	r.node.Spawn(dp, fullName)
	return etf.Atom(fullName), nil
}
开发者ID:pik4ez,项目名称:ndrctl,代码行数:15,代码来源:node.go

示例6: registrator

func (n *Node) registrator() {
	for {
		select {
		case req := <-n.registry.storeChan:
			// FIXME: make proper allocation, now it just stub
			var id uint32 = 0
			for k, _ := range n.channels {
				if k.Id >= id {
					id = k.Id + 1
				}
			}
			var pid etf.Pid
			pid.Node = etf.Atom(n.FullName)
			pid.Id = id
			pid.Serial = 0 // FIXME
			pid.Creation = byte(n.Creation)

			n.channels[pid] = req.channels
			req.replyTo <- pid
		case req := <-n.registry.regNameChan:
			n.registered[req.name] = req.pid
		case req := <-n.registry.unregNameChan:
			delete(n.registered, req.name)
		}
	}
}
开发者ID:ibmendoza,项目名称:node,代码行数:26,代码来源:node.go

示例7: handleTerms

func (currNode *Node) handleTerms(c net.Conn, wchan chan []etf.Term, terms []etf.Term) {
	nLog("Node terms: %#v", terms)

	if len(terms) == 0 {
		return
	}
	switch t := terms[0].(type) {
	case etf.Tuple:
		if len(t) > 0 {
			switch act := t.Element(1).(type) {
			case int:
				switch act {
				case REG_SEND:
					if len(terms) == 2 {
						currNode.RegSend(t.Element(2), t.Element(4), terms[1])
					} else {
						nLog("*** ERROR: bad REG_SEND: %#v", terms)
					}
				default:
					nLog("Unhandled node message (act %d): %#v", act, t)
				}
			case etf.Atom:
				switch act {
				case etf.Atom("$go_set_node"):
					nLog("SET NODE %#v", t)
					currNode.neighbors[t[1].(etf.Atom)] = nodeConn{conn: c, wchan: wchan}
				}
			default:
				nLog("UNHANDLED ACT: %#v", t.Element(1))
			}
		}
	}
}
开发者ID:ibmendoza,项目名称:node,代码行数:33,代码来源:node.go

示例8: Init

// Init initializes process state using arbitrary arguments
func (gs *gonodeSrv) Init(args ...interface{}) {
	log.Printf("GO_SRV: Init: %#v", args)

	// Self-registration with name go_srv
	gs.Node.Register(etf.Atom("go_srv"), gs.Self)

	// Store first argument as channel
	gs.completeChan = args[0].(chan bool)
}
开发者ID:lucas564985699,项目名称:node,代码行数:10,代码来源:gonode.go

示例9: HandleCall

func (rpcs *rpcRex) HandleCall(message *etf.Term, from *etf.Tuple) (reply *etf.Term) {
	nLog("REX: HandleCall: %#v, From: %#v", *message, *from)
	switch req := (*message).(type) {
	case etf.Tuple:
		if len(req) > 0 {
			switch act := req[0].(type) {
			case etf.Atom:
				if string(act) == "call" {
					nLog("RPC CALL: Module: %#v, Function: %#v, Args: %#v, GroupLeader: %#v", req[1], req[2], req[3], req[4])
					replyTerm := etf.Term(etf.Tuple{req[1], req[2]})
					reply = &replyTerm
				}
			}
		}
	}
	if reply == nil {
		replyTerm := etf.Term(etf.Tuple{etf.Atom("badrpc"), etf.Atom("unknown")})
		reply = &replyTerm
	}
	return
}
开发者ID:lucas564985699,项目名称:node,代码行数:21,代码来源:rpc.go

示例10: Send

// Send sends message to destination process withoud source
func (currNode *Node) Send(to etf.Pid, message etf.Term) {
	nLog("Send: %#v, %#v", to, message)
	if string(to.Node) == currNode.FullName {
		nLog("Send to local node")
		pcs := currNode.channels[to]
		pcs.in <- message
	} else {
		nLog("Send to remote node: %#v, %#v", to, currNode.neighbors[to.Node])

		msg := []etf.Term{etf.Tuple{SEND, etf.Atom(""), to}, message}
		currNode.neighbors[to.Node].wchan <- msg
	}
}
开发者ID:ibmendoza,项目名称:node,代码行数:14,代码来源:node.go

示例11: main

func main() {
	// Initialize new node with given name and cookie
	enode := node.NewNode("[email protected]", "123")

	// Allow node be available on 5588 port
	err := enode.Publish(5588)
	if err != nil {
		log.Fatalf("Cannot publish: %s", err)
	}

	// Create channel to receive message when main process should be stopped
	completeChan := make(chan bool)

	// Initialize new instance of gonodeSrv structure which implements Process behaviour
	eSrv := new(gonodeSrv)

	// Spawn process with one arguments
	enode.Spawn(eSrv, completeChan)

	// RPC
	// Create closure
	eClos := func(terms etf.List) (r etf.Term) {
		r = etf.Term(etf.Tuple{etf.Atom("gonode"), etf.Atom("reply"), len(terms)})
		return
	}

	// Provide it to call via RPC with `rpc:call([email protected], go_rpc, call, [as, qwe])`
	err = enode.RpcProvide("go_rpc", "call", eClos)
	if err != nil {
		log.Printf("Cannot provide function to RPC: %s", err)
	}

	// Wait to stop
	<-completeChan

	return
}
开发者ID:ibmendoza,项目名称:node,代码行数:37,代码来源:gonode.go

示例12: HandleCall

func (nk *netKernel) HandleCall(message *etf.Term, from *etf.Tuple) (reply *etf.Term) {
	nLog("NET_KERNEL: HandleCall: %#v, From: %#v", *message, *from)
	switch t := (*message).(type) {
	case etf.Tuple:
		if len(t) == 2 {
			switch tag := t[0].(type) {
			case etf.Atom:
				if string(tag) == "is_auth" {
					nLog("NET_KERNEL: is_auth: %#v", t[1])
					replyTerm := etf.Term(etf.Atom("yes"))
					reply = &replyTerm
				}
			}
		}
	}
	return
}
开发者ID:ibmendoza,项目名称:node,代码行数:17,代码来源:net_kernel.go

示例13: rpcCreateFS

// rpc funcs for erlang nodes
// args must be in form `[Name:string]`
// returns either `ok` or `{error, Reason}`
func (r *Relay) rpcCreateFS(terms etf.List) etf.Term {
	if len(terms) != 1 {
		return etf.Term(etf.Tuple{etf.Atom("error"), etf.Atom("badarith")})
	}
	t := terms[0]
	if _, ok := t.(string); !ok {
		return etf.Term(etf.Tuple{etf.Atom("error"), etf.Atom("badarg")})
	}
	name := t.(string)
	err := r.createFS(name)
	if err != nil {
		println("cannot create fs: ", err)
		return etf.Term(etf.Tuple{etf.Atom("error"), etf.Atom("failed-to-create-fs")})
	}
	return etf.Term(etf.Atom("ok"))
}
开发者ID:pik4ez,项目名称:ndrctl,代码行数:19,代码来源:node.go

示例14: runNode

func runNode() (enode *node.Node) {
	enode = node.NewNode(nodeName, nodeCookie)
	err := enode.Publish(nodePort)
	if err != nil {
		log.Printf("Cannot publish: %s", err)
		enode = nil
	}
	eSrv := new(eclusSrv)
	enode.Spawn(eSrv)

	eClos := func(terms etf.List) (r etf.Term) {
		r = etf.Term(etf.Tuple{etf.Atom("enode"), len(terms)})
		return
	}

	err = enode.RpcProvide("enode", "lambda", eClos)
	if err != nil {
		log.Printf("Cannot provide function to RPC: %s", err)
	}

	return
}
开发者ID:goerlang,项目名称:eclus,代码行数:22,代码来源:enode.go

示例15: HandleCall

// affecter data request
// msg must be atom `req`
func (d *deviceProc) HandleCall(msg *etf.Term, from *etf.Tuple) *etf.Term {
	println("handling call")
	if atom, ok := (*msg).(etf.Atom); !ok {
		t := etf.Term(etf.Tuple{etf.Atom("error"), etf.Atom("badarg")})
		return &t
	} else {
		if string(atom) != "req" {
			t := etf.Term(etf.Tuple{etf.Atom("error"), etf.Atom("badarg")})
			return &t
		}
		buf := d.device.Affect()
		if buf == nil {
			t := etf.Term(etf.Tuple{etf.Atom("ok"), etf.Atom("nil")})
			return &t
		} else {
			t := etf.Term(etf.Tuple{etf.Atom("ok"), buf})
			return &t
		}
	}
}
开发者ID:pik4ez,项目名称:ndrctl,代码行数:22,代码来源:deviceproc.go


注:本文中的github.com/goerlang/etf.Atom函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。