aergoio/aergo

View on GitHub
types/peerstate.go

Summary

Maintainability
A
0 mins
Test Coverage
F
57%
package types

import "sync/atomic"

// PeerState indicated current state of peer, but
type PeerState int32

// indicating status of remote peer
const (
    // STARTING means connection is just estabished.
    STARTING PeerState = iota
    // HANDSHAKING means that local host sent status message but not receive status message from remote
    HANDSHAKING
    // RUNNING means complete handshake (i.e. exchanged status message) and can communicate each other
    RUNNING
    // STOPPING means peer was received stop signal and working in termination process. No new message is sent and receiving message is ignored.
    STOPPING
    // STOPPED means peer was tatally finished.
    STOPPED
    // DOWN means server can't communicate to remote peer. peer will be delete after TTL or
    DOWN
)

// Get returns current state with concurrent manner
func (s *PeerState) Get() PeerState {
    return PeerState(atomic.LoadInt32((*int32)(s)))
}

// SetAndGet change state in atomic manner
func (s *PeerState) SetAndGet(ns PeerState) PeerState {

    return PeerState(atomic.SwapInt32((*int32)(s), int32(ns)))
}

//go:generate stringer -type=PeerState