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) { } }
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) { } }
/// <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" }); } }
/// <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" }); } }
/// <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) { } }
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) { } }
/// <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" }); } }
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); } } }); }