Ejemplo n.º 1
0
        public RaftServiceNode(NodeSettings nodeSettings, string dbreezePath, IBusinessHandler handler, int port = 4250, string nodeName = "default", IWarningLog log = null)
        {
            if (nodeSettings == null)
            {
                nodeSettings = new NodeSettings();
            }
            this.NodeSettings = nodeSettings;
            this.NodeName     = nodeName;
            this.log          = log;
            this.port         = port;

            peerNetwork = new TcpPeerNetwork(this);
            //bool firstNode = true;
            if (this.NodeSettings.RaftEntitiesSettings == null)
            {
                this.NodeSettings.RaftEntitiesSettings = new RaftEntitySettings();
            }
            var re_settings = this.NodeSettings.RaftEntitiesSettings;

            if (String.IsNullOrEmpty(re_settings.EntityName))
            {
                throw new Exception("Raft.Net: entities must have unique names. Change RaftNodeSettings.EntityName.");
            }

            var rn = new RaftStateMachine(re_settings ?? new RaftEntitySettings(), dbreezePath, this.peerNetwork, this.log, handler);

            rn.SetNodesQuantityInTheCluster((uint)this.NodeSettings.TcpClusterEndPoints.Count);
            rn.NodeAddress.NodeAddressId = port; //for debug/emulation purposes

            rn.NodeAddress.NodeUId = Guid.NewGuid().ToByteArray().Substring(8, 8).To_Int64_BigEndian();
            rn.NodeName            = this.NodeName;
            this.raftNode          = rn;
            rn.NodeStart();
        }