Example #1
0
        public void SendToAll(eRaftSignalType signalType, byte[] data, NodeAddress senderNodeAddress, string entityName, bool highPriority = false)
        {
            try
            {
                List <TcpPeer> peers = null;
                _sync.EnterReadLock();
                try
                {
                    peers = Peers.Values.ToList();
                }
                catch (Exception ex)
                {
                    //throw;
                }
                finally
                {
                    _sync.ExitReadLock();
                }

                foreach (var peer in peers)
                {
                    peer.Write(cSprot1Parser.GetSprot1Codec(new byte[] { 00, 02 },
                                                            (
                                                                new TcpMsgRaft()
                    {
                        EntityName = entityName, RaftSignalType = signalType, Data = data
                    }
                                                            ).SerializeBiser()), highPriority);
                }
            }
            catch (Exception ex)
            {
            }
        }
Example #2
0
        public void SendTo(NodeAddress nodeAddress, eRaftSignalType signalType, byte[] data, NodeAddress myNodeAddress)
        {
            Task.Run(() =>
            {
                foreach (var n in nodes)
                {
                    if (!n.Value.IsRunning)
                    {
                        continue;
                    }

                    if (n.Value.NodeAddress.NodeAddressId == myNodeAddress.NodeAddressId)
                    {
                        continue;       //Skipping sending to self
                    }
                    if (n.Value.NodeAddress.NodeAddressId == nodeAddress.NodeAddressId)
                    {
                        //May be put it all into new Threads or so
                        ((IRaftComReceiver)n.Value).IncomingSignalHandler(myNodeAddress, signalType, data);

                        break;
                    }
                }
            });
        }
        public void SendToAll(eRaftSignalType signalType, IEncoder data, NodeRaftAddress senderNodeAddress, string entityName, bool highPriority = false)
        {
            try
            {
                List <TcpPeer> peers = null;
                _sync.EnterReadLock();
                try
                {
                    peers = Peers.Values.ToList();
                }
                catch (Exception ex)
                {
                    //throw;
                }
                finally
                {
                    _sync.ExitReadLock();
                }

                foreach (var peer in peers)
                {
                    peer.Send(RaftCommand.RaftMessage, new TcpMsgRaft()
                    {
                        EntityName = entityName, RaftSignalType = signalType, Data = data.BiserEncode()
                    });
                }
            }
            catch (Exception ex)
            {
            }
        }
Example #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="nodeAddress"></param>
 /// <param name="signalType"></param>
 /// <param name="data"></param>
 /// <param name="senderNodeAddress"></param>
 public void SendTo(NodeAddress nodeAddress, eRaftSignalType signalType, byte[] data, NodeAddress senderNodeAddress)
 {
     try
     {
         //!!!!!!!!!!!!!!!!!!!!  GO ON HERE
     }
     catch (Exception ex)
     {
         this.LogError(new WarningLogEntry()
         {
             Exception = ex, Method = "Raft.RaftNodeUdp.SendTo"
         });
     }
 }
Example #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="address">Address of the node who sent the signal</param>
        /// <param name="signalType"></param>
        /// <param name="data"></param>
        public void HandleRaftSignal(NodeRaftAddress address, eRaftSignalType signalType, object data)
        {
            try
            {
                if (GlobalConfig.Verbose)
                {
                    Console.WriteLine("mesage from:" + address.EndPointSID + " signal:" + signalType);
                }
                lock (lock_Operations)
                {
                    switch (signalType)
                    {
                    case eRaftSignalType.LeaderHearthbeat:
                        ParseLeaderHeartbeat(address, data);
                        break;

                    case eRaftSignalType.CandidateRequest:
                        ParseCandidateRequest(address, data);
                        break;

                    case eRaftSignalType.VoteOfCandidate:
                        ParseVoteOfCandidate(address, data);
                        break;

                    case eRaftSignalType.StateLogEntrySuggestion:
                        ParseStateLogEntrySuggestion(address, data);
                        break;

                    case eRaftSignalType.StateLogEntryRequest:
                        ParseStateLogEntryRequest(address, data);
                        break;

                    case eRaftSignalType.StateLogEntryAccepted:
                        this.logHandler.ParseStateLogEntryAccepted(address, data);
                        break;

                    case eRaftSignalType.StateLogRedirectRequest:     //Not a leader node tries to add command
                        this.logHandler.ParseStateLogRedirectRequest(address, data);
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Log(new WarningLogEntry()
                {
                    Exception = ex, Method = "Raft.RaftNode.IncomingSignalHandler"
                });
            }
        }
Example #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="address">Address of the node who sent the signal</param>
        /// <param name="signalType"></param>
        /// <param name="data"></param>
        public void IncomingSignalHandler(NodeAddress address, eRaftSignalType signalType, byte[] data)
        {
            try
            {
                lock (lock_Operations)
                {
                    switch (signalType)
                    {
                    case eRaftSignalType.LeaderHearthbeat:
                        ParseLeaderHeartbeat(address, data);
                        break;

                    case eRaftSignalType.CandidateRequest:
                        ParseCandidateRequest(address, data);
                        break;

                    case eRaftSignalType.VoteOfCandidate:
                        ParseVoteOfCandidate(address, data);
                        break;

                    case eRaftSignalType.StateLogEntrySuggestion:
                        ParseStateLogEntrySuggestion(address, data);
                        break;

                    case eRaftSignalType.StateLogEntryRequest:
                        ParseStateLogEntryRequest(address, data);
                        break;

                    case eRaftSignalType.StateLogEntryAccepted:
                        ParseStateLogEntryAccepted(address, data);
                        break;

                    case eRaftSignalType.StateLogRedirectRequest:     //Not a leader node tries to add command
                        ParseStateLogRedirectRequest(address, data);
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Log(new WarningLogEntry()
                {
                    Exception = ex, Method = "Raft.RaftNode.IncomingSignalHandler"
                });
            }
        }
 public void SendTo(NodeRaftAddress nodeAddress, eRaftSignalType signalType, IEncoder data, NodeRaftAddress senderNodeAddress, string entityName)
 {
     try
     {
         TcpPeer peer = null;
         if (Peers.TryGetValue(nodeAddress.EndPointSID, out peer))
         {
             peer.Send(RaftCommand.RaftMessage, new TcpMsgRaft()
             {
                 EntityName = entityName, RaftSignalType = signalType, Data = data.BiserEncode()
             });
         }
     }
     catch (Exception ex)
     {
     }
 }
Example #8
0
 public void SendTo(NodeAddress nodeAddress, eRaftSignalType signalType, byte[] data, NodeAddress senderNodeAddress, string entityName)
 {
     try
     {
         TcpPeer peer = null;
         if (Peers.TryGetValue(nodeAddress.EndPointSID, out peer))
         {
             peer.Write(cSprot1Parser.GetSprot1Codec(new byte[] { 00, 02 },
                                                     (
                                                         new TcpMsgRaft()
             {
                 EntityName = entityName, RaftSignalType = signalType, Data = data
             }
                                                     ).SerializeBiser()));
         }
     }
     catch (Exception ex)
     {
     }
 }
Example #9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="signalType"></param>
        /// <param name="data"></param>
        /// <param name="senderNodeAddress"></param>
        public void SendToAll(eRaftSignalType signalType, byte[] data, NodeAddress senderNodeAddress)
        {
            try
            {
                List <NodeAddress> lst = null;
                sync_ListClusterEndPoints.EnterReadLock();
                try
                {
                    lst = ListClusterEndPoints.Where(r => !r.Value.IsMe).Select(r => r.Value).ToList();
                }
                finally
                {
                    sync_ListClusterEndPoints.ExitReadLock();
                }
                if (lst == null || lst.Count() < 1)
                {
                    return;
                }


                foreach (var n in lst)
                {
                    //!!!!!!!!!!!!!!!!!!!!  GO ON HERE
                    //udpSocket.SendTo(n.IpEP,signalType,data)
                    //////////if (n.NodeAddress.NodeAddressId == nodeAddress.NodeAddressId)
                    //////////{
                    //////////    //May be put it all into new Threads or so
                    //////////    ((IRaftComReceiver)n).IncomingSignalHandler(myNodeAddress, signalType, data);

                    //////////    break;
                    //////////}
                }
            }
            catch (Exception ex)
            {
                this.LogError(new WarningLogEntry()
                {
                    Exception = ex, Method = "Raft.RaftNodeUdp.SendToAll"
                });
            }
        }
Example #10
0
        public void SendToAll(eRaftSignalType signalType, byte[] data, NodeAddress myNodeAddress, string entityName, bool highPriority = false)
        {
            Task.Run(() =>
            {
                lock (sync_nodes)
                {
                    foreach (var n in nodes)
                    {
                        if (!((RaftNode)n.Value).IsRunning)
                        {
                            continue;
                        }

                        if (((RaftNode)n.Value).NodeAddress.NodeAddressId == myNodeAddress.NodeAddressId)
                        {
                            continue;           //Skipping sending to self
                        }
                        //May be put it all into new Threads or so !! no for udp channels
                        ((IRaftComReceiver)n.Value).IncomingSignalHandler(myNodeAddress, signalType, data);
                    }
                }
            });
        }