mirror of
https://github.com/netbirdio/netbird.git
synced 2025-08-14 09:18:51 +02:00
Split client app into cmd and daemon service (#239)
This commit is contained in:
committed by
GitHub
parent
3e46f38166
commit
ef47385e38
67
client/internal/state.go
Normal file
67
client/internal/state.go
Normal file
@ -0,0 +1,67 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type StatusType string
|
||||
|
||||
const (
|
||||
StatusIdle StatusType = "Idle"
|
||||
|
||||
StatusConnecting StatusType = "Connecting"
|
||||
StatusConnected StatusType = "Connected"
|
||||
)
|
||||
|
||||
// CtxInitState setup context state into the context tree.
|
||||
//
|
||||
// This function should be used to initialize context before
|
||||
// CtxGetState will be executed.
|
||||
func CtxInitState(ctx context.Context) context.Context {
|
||||
return context.WithValue(ctx, stateCtx, &contextState{
|
||||
status: StatusIdle,
|
||||
})
|
||||
}
|
||||
|
||||
// CtxGetState object to get/update state/errors of process.
|
||||
func CtxGetState(ctx context.Context) *contextState {
|
||||
return ctx.Value(stateCtx).(*contextState)
|
||||
}
|
||||
|
||||
type contextState struct {
|
||||
err error
|
||||
status StatusType
|
||||
mutex sync.Mutex
|
||||
}
|
||||
|
||||
func (c *contextState) Set(update StatusType) {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
|
||||
c.status = update
|
||||
c.err = nil
|
||||
}
|
||||
|
||||
func (c *contextState) Status() (StatusType, error) {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
|
||||
if c.err != nil {
|
||||
return "", c.err
|
||||
}
|
||||
|
||||
return c.status, nil
|
||||
}
|
||||
|
||||
func (c *contextState) Wrap(err error) error {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
|
||||
c.err = err
|
||||
return err
|
||||
}
|
||||
|
||||
type stateKey int
|
||||
|
||||
var stateCtx stateKey
|
Reference in New Issue
Block a user