|
|
- package types
-
- import (
- "fmt"
- "strings"
- )
-
- type NodeInfo struct {
- Moniker string
- Network string
- Version string
-
- Host string
- P2PPort uint16
- RPCPort uint16
- }
-
- func (ni *NodeInfo) CompatibleWith(no *NodeInfo) error {
- iM, im, _, ie := splitVersion(ni.Version)
- oM, om, _, oe := splitVersion(no.Version)
-
- // if our own version number is not formatted right, we messed up
- if ie != nil {
- return ie
- }
-
- // version number must be formatted correctly ("x.x.x")
- if oe != nil {
- return oe
- }
-
- // major version must match
- if iM != oM {
- return fmt.Errorf("Peer is on a different major version. Got %v, expected %v", oM, iM)
- }
-
- // minor version must match
- if im != om {
- return fmt.Errorf("Peer is on a different minor version. Got %v, expected %v", om, im)
- }
-
- // nodes must be on the same network
- if ni.Network != no.Network {
- return fmt.Errorf("Peer is on a different network. Got %v, expected %v", no.Network, ni.Network)
- }
-
- return nil
- }
-
- func splitVersion(version string) (string, string, string, error) {
- spl := strings.Split(version, ".")
- if len(spl) != 3 {
- return "", "", "", fmt.Errorf("Invalid version format %v", version)
- }
- return spl[0], spl[1], spl[2], nil
- }
|