mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-17 07:26:48 +00:00
* state: Add management system (init) * linter: fix * engine: gofmt * gct: after merge fixup * documentation: add * rpc: implement services for testing * gctcli: gofmt state_management.go * documentation: reinstate lost information * state: Add pair check to determine trading operation * exchanges: add interface for specific state scoped subsystem functionality * engine/order_man: reduce code footprint using new method * RPC: implement pair trading request and change exported name to something specific to state * engine: add tests * engine: Add to withdraw manager * documentation: reinstate soxipy in contrib. list * engine: const fake name * Glorious: NITERINOS * merge: fix issues * engine: csm incorporate service name into log output * engine: fix linter issues * gct: fix tests * currencystate: remove management type * rpc: fix tests * backtester: fix tests * Update engine/currency_state_manager.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update engine/currency_state_manager.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/currencystate/currency_state.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/alert/alert.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/alert/alert.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits * config: integrate with config and remove flag delay adjustment * gctcli: fix issues after name changes * engine: gofmt manager file * Update engine/rpcserver.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * engine: Add enable/disable manager functions, add default popoulation for potential assets * linter: fix * engine/test: bump subsystem count * Update engine/currency_state_manager.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/bithumb/bithumb.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits addressed * alert: fix commenting for its generalized purpose * glorious: nits * engine: use standard string in log output * bitfinex: apply patch, thanks @thrasher- * bitfinex: fix spelling * engine/currencystate: Add logs/fix logs Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
65 lines
1.9 KiB
Go
65 lines
1.9 KiB
Go
package orderbook
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/alert"
|
|
)
|
|
|
|
// Unsafe is an exported linked list reference to the current bid/ask heads and
|
|
// a reference to the underlying depth mutex. This allows for the exposure of
|
|
// the internal list to an external strategy or subsystem. The bid and ask
|
|
// fields point to the actual head fields contained on both linked list structs,
|
|
// so that this struct can be reusable and not needed to be called on each
|
|
// inspection.
|
|
type Unsafe struct {
|
|
BidHead **Node
|
|
AskHead **Node
|
|
m *sync.Mutex
|
|
|
|
// UpdatedViaREST defines if sync manager is updating this book via the REST
|
|
// protocol then this book is not considered live and cannot be trusted.
|
|
UpdatedViaREST *bool
|
|
LastUpdated *time.Time
|
|
*alert.Notice
|
|
}
|
|
|
|
// Lock locks down the underlying linked list which inhibits all pending updates
|
|
// for strategy inspection.
|
|
func (src *Unsafe) Lock() {
|
|
src.m.Lock()
|
|
}
|
|
|
|
// Unlock unlocks the underlying linked list after inspection by a strategy to
|
|
// resume normal operations
|
|
func (src *Unsafe) Unlock() {
|
|
src.m.Unlock()
|
|
}
|
|
|
|
// LockWith locks both books for the context of cross orderbook inspection.
|
|
// WARNING: When inspecting diametrically opposed books a higher order mutex
|
|
// MUST be used or a dead lock will occur.
|
|
func (src *Unsafe) LockWith(dst sync.Locker) {
|
|
src.m.Lock()
|
|
dst.Lock()
|
|
}
|
|
|
|
// UnlockWith unlocks both books for the context of cross orderbook inspection
|
|
func (src *Unsafe) UnlockWith(dst sync.Locker) {
|
|
dst.Unlock() // Unlock in reverse order
|
|
src.m.Unlock()
|
|
}
|
|
|
|
// GetUnsafe returns an unsafe orderbook with pointers to the linked list heads.
|
|
func (d *Depth) GetUnsafe() Unsafe {
|
|
return Unsafe{
|
|
BidHead: &d.bids.linkedList.head,
|
|
AskHead: &d.asks.linkedList.head,
|
|
m: &d.m,
|
|
Notice: &d.Notice,
|
|
UpdatedViaREST: &d.options.restSnapshot,
|
|
LastUpdated: &d.options.lastUpdated,
|
|
}
|
|
}
|