| // compile | |
| // Copyright 2017 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package p | |
| type NodeLink struct{} | |
| // A role our end of NodeLink is intended to play | |
| type LinkRole int64 | |
| const ( | |
| LinkServer LinkRole = iota // link created as server | |
| LinkClient // link created as client | |
| // for testing: | |
| linkNoRecvSend LinkRole = 1 << 16 // do not spawn serveRecv & serveSend | |
| linkFlagsMask LinkRole = (1<<32 - 1) << 16 | |
| ) | |
| func NewNodeLink(role LinkRole) *NodeLink { | |
| var nextConnId uint32 | |
| switch role &^ linkFlagsMask { | |
| case LinkServer: | |
| nextConnId = 0 // all initiated by us connId will be even | |
| case LinkClient: | |
| nextConnId = 1 // ----//---- odd | |
| default: | |
| panic("invalid conn role") | |
| } | |
| _ = nextConnId | |
| return nil | |
| } |