Skip to content

Commit

Permalink
Add existing Node files
Browse files Browse the repository at this point in the history
  • Loading branch information
DariaMelnikova committed Mar 12, 2018
0 parents commit ae0ae94
Show file tree
Hide file tree
Showing 195 changed files with 3,934 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
@@ -0,0 +1,3 @@
.stack-work/*
data/*.txt
Node.cabal
30 changes: 30 additions & 0 deletions LICENSE
@@ -0,0 +1,30 @@
Copyright Enecuum (c) 2018

All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.

* Neither the name of Enecuum nor the names of other
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2 changes: 2 additions & 0 deletions Setup.hs
@@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain
21 changes: 21 additions & 0 deletions app/BootNode/Main.hs
@@ -0,0 +1,21 @@
-- бинарники бут ноды
module Main where

import Control.Monad
import Control.Concurrent
import Service.Timer
import Node.Node.Types

import Boot.Boot
import Boot.Types
import Node.Lib

main :: IO ()
main = do
exitCh <- newChan
answerCh <- newChan
void $ startNode "./data/bootInitData.bin"
exitCh answerCh managerBootNode $ \ch _ _ -> do
metronomeS 100000 (writeChan ch checkBroadcastNodes)
metronomeS 10000000 (writeChan ch deleteDeadSouls)
void $ readChan exitCh
9 changes: 9 additions & 0 deletions app/MakeConfigBootNode/Main.hs
@@ -0,0 +1,9 @@
{-# Language PackageImports #-}
module Main where

import Node.Node.Config.Make
import Node.Data.Data

main :: IO ()
main = do
makeFileConfig "./data/bootInitData.bin" [BootNode] 1666
9 changes: 9 additions & 0 deletions app/MakeConfigSimpleNode/Main.hs
@@ -0,0 +1,9 @@
{-# Language PackageImports #-}
module Main where

import Node.Node.Config.Make
import Node.Data.Data

main :: IO ()
main = do
makeFileConfig "./data/miningInitData.bin" [BroadcastNode] 1666
32 changes: 32 additions & 0 deletions app/SimpleNode/Main.hs
@@ -0,0 +1,32 @@
module Main where

import Control.Monad
import Control.Concurrent
import Node.Node.Mining
import Node.Node.Types
import Service.Timer
import Node.Lib
import Service.Metrics
import PoA
import CLI.CLI (control)

main :: IO ()
main = do
aExitChan <- newChan
aAnswerChan <- newChan
metric $ increment "cl.node.count"
void $ startNode "./data/miningInitData.bin"
aExitChan aAnswerChan managerMining $ \ch aChan aMyNodeId -> do
-- периодически проверяем, в каком состоянии относительно сети
-- мы находимся
metronomeS 400000 (writeChan ch connectivityQuery)
metronomeS 1000000 (writeChan ch deleteOldestMsg)
metronomeS 10000000 (writeChan ch deleteDeadSouls)
metronomeS 3000000 $ writeChan ch deleteOldestVacantPositions
idmain <- myThreadId
print idmain
idpoa <- forkIO $ servePoA "1554" aMyNodeId ch aChan "1556"
print idpoa
idcli <- forkIO $ control ch
print idcli
void $ readChan aExitChan
Binary file added data/bootInitData.bin
Binary file not shown.
Binary file added data/bootNodeConfigs/bootInitData1.bin
Binary file not shown.
1 change: 1 addition & 0 deletions data/bootNodeList.conf
@@ -0,0 +1 @@
[(32182577306544079806602665674428406723165416005525971576927739899916426865191,(127,0,0,1),1666)]
Binary file added data/broadcastNodeConfigs/miningInitData1.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData10.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData11.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData12.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData13.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData14.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData15.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData16.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData17.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData18.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData19.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData2.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData20.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData21.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData22.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData23.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData24.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData25.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData26.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData27.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData28.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData29.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData3.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData30.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData31.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData32.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData33.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData34.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData35.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData36.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData37.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData38.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData39.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData4.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData40.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData41.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData42.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData43.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData44.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData45.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData46.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData47.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData48.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData49.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData5.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData50.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData6.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData7.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData8.bin
Binary file not shown.
Binary file added data/broadcastNodeConfigs/miningInitData9.bin
Binary file not shown.
Binary file added data/miningInitData.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData1.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData10.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData100.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData11.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData12.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData13.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData14.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData15.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData16.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData17.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData18.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData19.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData2.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData20.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData21.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData22.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData23.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData24.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData25.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData26.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData27.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData28.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData29.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData3.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData30.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData31.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData32.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData33.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData34.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData35.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData36.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData37.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData38.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData39.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData4.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData40.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData41.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData42.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData43.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData44.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData45.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData46.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData47.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData48.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData49.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData5.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData50.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData51.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData52.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData53.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData54.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData55.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData56.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData57.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData58.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData59.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData6.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData60.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData61.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData62.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData63.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData64.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData65.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData66.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData67.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData68.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData69.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData7.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData70.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData71.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData72.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData73.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData74.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData75.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData76.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData77.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData78.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData79.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData8.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData80.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData81.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData82.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData83.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData84.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData85.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData86.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData87.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData88.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData89.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData9.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData90.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData91.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData92.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData93.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData94.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData95.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData96.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData97.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData98.bin
Binary file not shown.
Binary file added data/simpleNodeConfigs/miningInitData99.bin
Binary file not shown.
136 changes: 136 additions & 0 deletions package.yaml
@@ -0,0 +1,136 @@
name: Node
version: 0.1.0.7
github: "Enecuum/Node"
license: BSD3
author: "Dmitriy Pavlyuk"
maintainer: "al.lastor@enecuum.com"
copyright: "2018 Enecuum"

extra-source-files:
- README.md
- ChangeLog.md

# Metadata used when publishing your package
# synopsis: Short description of your package
# category: Web

# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
description:
Структура программы состоит из нескольких потоков в каждом из
которых выполняется своя функция. Цикл жизни каждой такой функции очень
прост. Она считывает сообщение из потока и в зависимости от его содержания
и значения переданных ей переменных она производит какие-то действия. В
литературе такую сущность называют актором.

Следует выделить такие акторы как центральный, серверный, клиентский.

Серверный отвечает за приём сообщений от незнакомых нод.

Клиентский - за присоединение к серверному актору ещё незнакомой ноды.

Центральный актор отвечает за хранение состояния ноды и приём решений,
обработку внешних команд и ответ на них.

dependencies:
- base >= 4.7 && < 5
- bytestring
- fgl
- time-units
- network
- websockets
- aeson
- cereal
- mtl
- cryptonite
- base16-bytestring
- base58-bytestring
- arithmoi
- directory
- filepath
- microlens
- microlens-mtl
- extra
- time
- clock
- containers
- random
- free
- iproute
- memory
- do-list
- transformers
- template-haskell
- async
- bimap
- random-shuffle
- split

library:
source-dirs: src
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
- -Wall
- -O2

executables:
BootNode-exe:
main: Main.hs
source-dirs: app/BootNode
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
- -Wall
- -O2
dependencies:
- Node

SimpleNode-exe:
main: Main.hs
source-dirs: app/SimpleNode
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
- -Wall
- -O2
dependencies:
- Node
MakeConfigBootNode-exe:
main: Main.hs
source-dirs: app/MakeConfigBootNode
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
- -Wall
- -O2
dependencies:
- Node
MakeConfigSimpleNode-exe:
main: Main.hs
source-dirs: app/MakeConfigSimpleNode
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
- -Wall
- -O2
dependencies:
- Node

tests:
Node-test:
main: Spec.hs
source-dirs: test
ghc-options:
- -threaded
- -rtsopts
- -O2
- -with-rtsopts=-N
dependencies:
- Node
116 changes: 116 additions & 0 deletions src/Boot/Boot.hs
@@ -0,0 +1,116 @@
{-# LANGUAGE ViewPatterns, LambdaCase #-}
module Boot.Boot where

import qualified Data.Map as M
import qualified Data.Set as S
import qualified Boot.Map.Random as RM
import Data.IORef
import Control.Monad.Extra
import Lens.Micro
import Control.Concurrent.Chan
import Debug.Trace

import Boot.Types
import Node.Node.Base
import Node.Node.Types
import Service.Monad.Option
import Node.Crypto
import Node.Data.Data
import Service.Timer


managerBootNode :: Chan ManagerBootNodeMsgBase -> IORef NodeBootNodeData -> IO ()
managerBootNode ch md = forever $ do
mData <- readIORef md
msg <- readChan ch
--debug (mData^.outChan) $ "manager " <> show msg
runOption msg $ do
baseNodeOpts ch md mData

opt isClientIsDisconnected $ bootNodeAnswerClientIsDisconnected md

opt isInitDatagram $ answerToInitDatagram md
opt isDatagramMsg $ answerToDatagramMsg ch md (mData^.myNodeId)
bootNodeAnswerToPing
(answerToPong
:: PongAnswer NodeBootNodeData ManagerBootNodeMsgBase)
bootNodeAnswerToInfoPing
opt isCheckBroadcastNodes $ answerToCheckBroadcastNodes md ch
opt isCheckBroadcastNode $ answerToCheckBroadcastNode ch md


answerToCheckBroadcastNodes ::
IORef NodeBootNodeData ->
Chan ManagerBootNodeMsgBase ->
ManagerBootNodeMsgBase -> IO ()
answerToCheckBroadcastNodes aMd aChan _ = do
aData <- readIORef aMd
let anActiveNodes :: [Node]
anActiveNodes = getNodes Active aData

aNodeIds :: [NodeId]
aNodeIds = (\aNode -> keyToId $ (aNode^.nPublicKey)) <$> anActiveNodes

aNeededInBroadcastLis :: [NodeId]
aNeededInBroadcastLis = filter (\aId -> S.notMember aId $ aData^.checSet)
aNodeIds

aBroadcastNodes :: [NodeId]
aBroadcastNodes = filter (\aId -> S.member aId $ aData^.checSet)
aNodeIds

forM_ aNeededInBroadcastLis $ \aNodeId -> do
aBroadcastNodeList <- aData^.broadcastNodes.to (RM.takeRandom 10)
sendJustPackagedMsg $ makeMsg aNodeId aData $
makePongMsg $ BroadcastNodeListAnswer aBroadcastNodeList
whenJust (aNodeId `M.lookup` (aData^.nodes)) $ \aNode -> do
timer 100000 $ do
sendExitMsgToNode aNode
whenJust (aGetIpAndPort aData aNodeId) $ \(aIp, aPort) -> do
timer 100000 $ do
writeChan aChan $ checkBroadcastNode aNodeId aIp aPort

forM_ aBroadcastNodes $ \aNodeId -> do
modifyIORef aMd $ checSet %~ S.delete aNodeId

whenJust (aNodeId `M.lookup` (aData^.nodes)) sendExitMsgToNode
whenJust (aGetIpAndPort aData aNodeId) $ \(aIp, aPort) -> do
modifyIORef aMd $ broadcastNodes %~ RM.insert aNodeId (aIp, aPort)
where
aGetIpAndPort aData aNodeId = do
aNode <- aNodeId `M.lookup` (aData^.nodes)
aHelloMsg <- aNode^.mHelloMsg
return (aNode^.nHostAddress, aHelloMsg^.listenPort)


answerToCheckBroadcastNode :: ManagerMsg a =>
Chan a -> IORef NodeBootNodeData -> ManagerBootNodeMsgBase -> IO ()
answerToCheckBroadcastNode aChan aMd (CheckBroadcastNode aNodeId aIp aPort) = do
modifyIORef aMd $ checSet %~ S.insert aNodeId
sendInitDatagramFunc aChan aIp aPort aNodeId aMd
answerToCheckBroadcastNode _ _ _ = return ()


bootNodeAnswerClientIsDisconnected ::
IORef NodeBootNodeData -> ManagerBootNodeMsgBase -> IO ()
bootNodeAnswerClientIsDisconnected aMd
(toManagerMsg -> ClientIsDisconnected aId aChan) = do
traceMarkerIO "bootNodeAnswerClientIsDisconnected"
aData <- readIORef aMd
whenJust (aId `M.lookup` (aData^.nodes)) $ \aNode -> do
when (aNode^.chan == aChan) $ do
minusStatusNumber aMd aId
modifyIORef aMd (nodes %~ M.delete aId)
bootNodeAnswerClientIsDisconnected _ _ = pure ()


bootNodeAnswerToPing :: PingAnswer NodeBootNodeData ManagerBootNodeMsgBase
bootNodeAnswerToPing _ _ _ _ = pure ()


bootNodeAnswerToPong :: PongAnswer NodeBootNodeData ManagerBootNodeMsgBase
bootNodeAnswerToPong _ _ _ _ = pure ()


bootNodeAnswerToInfoPing :: InfoPingAnswer NodeBootNodeData ManagerBootNodeMsgBase
bootNodeAnswerToInfoPing _ _ _ _ = pure ()

0 comments on commit ae0ae94

Please sign in to comment.