* Move P2PClientCallbacks.onStop() into disconnection logic rather than Actor.postStop()
* Rename onStop -> onDisconnect
* Add reconnect flag to P2PCallbacks.onDisconnect so we don't attempt to reconnect when not necessary
* Rename flag to forceReconnect, check getPeerConnectionCount in PeerManager.onP2PClientDisconnect to see if we have 0 connections. If we do reconnect
* Add PeerManager.isStarted flag, guard reconnection logic with this flag in onP2PClientDisconnected()
* Clear PeerFinder._peerData when PeerFinder.stop() is called
* WIP: Move disconnection logic into stream
* Rework ordering of PeerManager.stop() to shutdown queue after peers are removed
* Empty commit to re-run CI
* Await for getConnectionCount async in test case
* Try increasing queue size
* Bump queue size to 16
* Put initialization, initialization timeout logic in queue rather than callbacks
* Make messages that are sent to the queue rather than callbacks for various control messages
* Empty commit to re-run CI
* Empty commit to re-run CI
* Empty commit to re-run CI
* Remove P2PCallbacks all together
* Re-add PeerMessageReceiverTest
* WIP
* Reset PeerManager.dataMessageHandler to None on PeerManager.stop()
* WIP2
* Always set dataMessageHandler.peerData we process a new message in the stream
* remove PeerManager from PeerDatta
* Make PeerFinder mutable inside of PeerManager, pass the queue into PeerFinder to decouple PeerManager and PeerFinder
* Don't verify actor system shutdown for now
* Drain data message stream before PeerManager.stop() is complete
* Try to fix race condition where peers.length gets mutated as peers get disconnected
* Adjust logic to check if we have a _new_ peer, not a specific peer count
* rework PeerManager.stop() ordering
* Rework PeerFinder.stop() to use Future.traverse()
* Make ControlMessageHandler take PeerManager rather than Node as a param
* refactor PeerData to not take a reference to Node
* Move ControlMessageHandler out of {Node,NeutrinoNode}
* Fix ReConnectionTest
* Cleanup
* Revert logback-test.xml
* Fix connectioncount test case
* Get P2PClientTest passing consistently
* Empty commit to re-run CI
* Make PeerManager.peerDataMap private
* Remove PeerMessageSender as param to DataMessageHandler.addToStream()
* Remove PeerMessageSender parameter from DataMessageWrapper
* Add PeerMessageSenderApi
* Try adding a supervision strategy to the stream
* Empty commit to re-run CI
* Adjust log level down to try and get a better idea of whats happening on IC
* Add commandName to exception when we cannot find peerMessageSender in stream
* Try decreasing queue size to reduce async processing between being stream processing and actor receiving external p2p message
* Empty commit to re-run CI
* Increase max concurrent offers to nodeAppConfig.maxConnectedPeers
* Revert logging
* WIP: Add new states for FilterHeaderSync, FilterSync, DoneSyncing
* Get DataMessageHandler compiling
* Get src compiling
* Get tests compiling
* Remove syncPeer from DoneSyncing
* WIP: Get first NeutrinoNodeTest working
* Get first NeutrinoNodeTest working for basic sync
* Fix small bug
* Fix bug where we transition to HeaderSync when we receive HeadersMessage with 0 headers. Also reduce conflicting states in DataMessageHandler.getHeaders()
* Add caveats for empty HeadersMessage
* WIP: Get NeutrinoNodeTest syncing compact filters during IBD passing consistently
* Remove generate block delay
* Empty commit to re-run CI
* Fix bug in onP2PClientStopped()
* Fix handling of DoneSyncing state when we receive headers messages
* Remove impossible case
* Remove node parameter to PeerMessageReceiver, pass the ControlMessageHandler and DataMessageHandler as parameters
* Remove node reference in DataMessageHandler, just pass PeerManager as parameter
* Fix pattern match to be exhaustive
* Move fetchCompactFilterHeaders, sendFirstGetCompactFilterHeadersCommand out of DataMessagehandler to decouple DataMessageHandler, PeerManager
* scalafmt
* WIP: Refactor PeerMessageReceiver methods into PeerMessageReceiverState
* Remove state helper methods from PeerMessageReceiver
* WIP: Remove PeerMessageReceiverState from PeerMessageReceiver
* Get things compiling and tests passing
* Remove currentPeerMessageHandlerReceiver
* Refactor PeerMessageReceiverTest to not use bitcoind
* Fix bug where compact filters weren't being processed in order of block height during IBD
* Use sorted compact filter messages in chainApi.processFilters()
* Add logic to fetch block headers after compact filters are synced in IBD to avoid a stale tip
* Restore logging, remove println
* Add comment linking to issue
* Cleanup logging
* Only send getheaders message after filter sync if we are in IBD