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)
     {
     }
 }
Esempio n. 2
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)
     {
     }
 }
        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();
            }
        }
Esempio n. 4
0
 public void AddTcpClient(TcpClient peer)
 {
     var p = new TcpPeer(peer, trn);
 }
Esempio n. 5
0
        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();
            }
        }
        public TcpPeer AddTcpClient(IChannelHandlerContext peer)
        {
            var p = new TcpPeer(peer, trn);

            return(p);
        }