public void AddPeerToClusterEndPoints(TcpPeer peer, bool handshake) { _sync.EnterWriteLock(); try { //Choosing priority connection if (!Peers.ContainsKey(peer.EndPointSID)) { Peers[peer.EndPointSID] = peer; peer.FillNodeAddress(); if (handshake) { peer.Send(RaftCommand.HandshakeACK, new TcpMsgHandshake() { NodeListeningPort = trn.port, NodeUID = trn.GetNode().NodeAddress.NodeUId, }); } } else { //Peers[peer.EndPointSID].Send(RaftCommand.Ping,"ping"); //ping //removing incoming connection peer.Dispose(true); return; } } catch (Exception ex) { //throw; } finally { _sync.ExitWriteLock(); } }
public void AddPeerToClusterEndPoints(TcpPeer peer, bool handshake) { _sync.EnterWriteLock(); try { if (peer.Handshake.NodeUID == trn.GetNodeByEntityName("default").NodeAddress.NodeUId) //Self disconnect { trn.NodeSettings.TcpClusterEndPoints.Where(r => r.EndPointSID == peer.EndPointSID) .FirstOrDefault().Me = true; peer.Dispose(true); return; } //Choosing priority connection if (!Peers.ContainsKey(peer.EndPointSID)) { if (handshake && trn.GetNodeByEntityName("default").NodeAddress.NodeUId > peer.Handshake.NodeUID) { //trn.log.Log(new WarningLogEntry() //{ // LogType = WarningLogEntry.eLogType.DEBUG, // Description = $"{trn.port}> !!!!!dropped{peer.Handshake.NodeListeningPort} {peer.Handshake.NodeListeningPort} on handshake as weak" //}); peer.Dispose(true); return; } Peers[peer.EndPointSID] = peer; peer.FillNodeAddress(); //trn.log.Log(new WarningLogEntry() //{ // LogType = WarningLogEntry.eLogType.DEBUG, // Description = $"{trn.port}> >>>>>>connected{peer.Handshake.NodeListeningPort} {peer.Handshake.NodeListeningPort} by {(handshake ? "handshake" : "ACK")} with diff: {(trn.rn.NodeAddress.NodeUId - peer.Handshake.NodeUID)}" //}); if (handshake) { //sending back handshake ack peer.Write( cSprot1Parser.GetSprot1Codec( new byte[] { 00, 03 }, (new TcpMsgHandshake() { NodeListeningPort = trn.port, NodeUID = trn.GetNodeByEntityName("default").NodeAddress.NodeUId, }).SerializeBiser()) ); } } else { //trn.log.Log(new WarningLogEntry() //{ // LogType = WarningLogEntry.eLogType.DEBUG, // Description = $"{trn.port}> !!!!!dropped{peer.Handshake.NodeListeningPort} {peer.Handshake.NodeListeningPort} as existing" //}); //Sending ping on existing connection (may be it is alredy old) Peers[peer.EndPointSID].Write(cSprot1Parser.GetSprot1Codec(new byte[] { 00, 05 }, null)); //ping //removing incoming connection peer.Dispose(true); return; } } catch (Exception ex) { //throw; } finally { _sync.ExitWriteLock(); } }