1// compile
2
3// Copyright 2017 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7package p
8
9type NodeLink struct{}
10
11// A role our end of NodeLink is intended to play
12type LinkRole int64
13
14const (
15	LinkServer LinkRole = iota // link created as server
16	LinkClient                 // link created as client
17
18	// for testing:
19	linkNoRecvSend LinkRole = 1 << 16 // do not spawn serveRecv & serveSend
20	linkFlagsMask  LinkRole = (1<<32 - 1) << 16
21)
22
23func NewNodeLink(role LinkRole) *NodeLink {
24	var nextConnId uint32
25	switch role &^ linkFlagsMask {
26	case LinkServer:
27		nextConnId = 0 // all initiated by us connId will be even
28	case LinkClient:
29		nextConnId = 1 // ----//---- odd
30	default:
31		panic("invalid conn role")
32	}
33
34	_ = nextConnId
35	return nil
36}
37