| // 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 |
| } |