예제 #1
0
파일: Tunnel.cs 프로젝트: nterry/PipeWrench
        private void SendHeartbeat(string remoteIp, int remotePort)
        {
            lock (_hbMutex)
            {
                if (_hbMutex.IsHeld())
                {
                    //Logger.Info(string.Format("TunnelId={0} TunnelName={1} Message=\"Heartbeat has already been sent to {2}:{3} in the last {4} seconds. Aborting.\"", GetId(), FriendlyName, remoteIp, remotePort, HeartbeatTimeout / 1000));
                    return;
                }
                Logger.Info(string.Format("TunnelId={0} TunnelName={1} Message=\"Locking available mutex to send heartbeat to remote client {2}:{3}\"", GetId(), FriendlyName, remoteIp, remotePort));
                _hbMutex.Hold();
            }

            var tmpBuffer = Buffer.New();

            Buffer.ClearBuffer(tmpBuffer);
            Buffer.FinalizeBuffer(tmpBuffer);
            SockLib.SendMessage(_socket, remoteIp, remotePort, tmpBuffer);
            Thread.Sleep(HeartbeatTimeout);

            lock (_hbMutex)
            {
                Logger.Info(string.Format("TunnelId={0} TunnelName={1} Message=\"Releasing mutex for heartbeat\"", GetId(), FriendlyName));
                _hbMutex.Release();
            }
        }
예제 #2
0
 private DefaultMessageHandler()
 {
     _recvSocket = CreateSocket();
     Logger.Debug("Successfully created local recieve socket.");
     _recvBuffer = Buffer.New();
     _recvThread = new Thread(MessageReceiveThread).Run();
     _singletonMessageHandlerRef = this;
 }
예제 #3
0
 private DefaultMessageHandler()
 {
     _recvSocket = CreateSocket();
     Logger.Debug("Successfully created local recieve socket.");
     _recvBuffer = Buffer.New();
     _recvThread = new Thread(MessageReceiveThread).Run();
     _singletonMessageHandlerRef = this;
 }
예제 #4
0
        public TestClientTcpAsync()
        {
            _receiveBuffer = Buffer.New();
            _sendBuffer = Buffer.New();

            SockLib.TcpConnect("127.0.0.1", 14804, SocketCommunicationTypes.NonBlocking, TcpConnected);
            while (true)
            {
                //Here so the main thread runs continuously.
            }
        }
예제 #5
0
 public TestServerTcpAsync()
 {
     _receiveBuffer = Buffer.New();
     _sendBuffer = Buffer.New();
     _listenSocket = SockLib.TcpListen(14804);
     Console.WriteLine("Server now listening on TCP port 14804");
     SockLib.TcpAccept(_listenSocket, SocketCommunicationTypes.NonBlocking, ClientConnected);
     while (true)
     {
         //Here so the main thread runs continuously
     }
 }
예제 #6
0
 public TestClientSync()
 {
     _sendBuffer = Buffer.New();
     _receiveBuffer = Buffer.New();
     Console.WriteLine("Connecting to server... Please Wait");
     _server = SockLib.TcpConnect("127.0.0.1", 14804);
     ReceiveTestMessage();
     SendTestMessage();
     while(true)
     {
         //Here so we run continuously...
     }
 }
예제 #7
0
 public TestServerSync()
 {
     Console.WriteLine("Waiting for client to connect...");
     _listenSocket = SockLib.TcpListen(14804);
     _sendBuffer = Buffer.New();
     _receiveBuffer = Buffer.New();
     _client = SockLib.TcpAccept(_listenSocket);
     SendTestMessage();
     ReceiveTestMessage();
     while(true)
     {
     }
 }
예제 #8
0
파일: Tunnel.cs 프로젝트: nterry/PipeWrench
        private void TunnelSendThread(string remoteIp, int remotePort)
        {
            while (true)
            {
                var message = DequeueMessage();
                if (message == null)
                {
                    new Thread(() => SendHeartbeat(remoteIp, remotePort)).Run();
                    continue;
                }

                Buffer.ClearBuffer(_sendBuffer);
                Buffer.Add(_sendBuffer, message);
                Buffer.FinalizeBuffer(_sendBuffer);
                SockLib.SendMessage(_socket, remoteIp, remotePort, _sendBuffer);
            }
        }
예제 #9
0
        public TestClientUdp()
        {
            _receiveBuffer = Buffer.New();
            _sendBuffer = Buffer.New();

            var tempSocket = SockLib.TcpConnect("127.0.0.1", 14804);
            var clientIp = SockLib.GetRemoteIpAddress(tempSocket);

            _localSocket = SockLib.UdpConnect(LocalUdpPort);

            ReceiveTestMessage();

            SendTestResponse(clientIp);

            while (true)
            {
                //Here so the main thread runs continuously.
            }
        }
예제 #10
0
        public void MessageReceiveThread()
        {
            var exitFlag = false;

            while (exitFlag == false)
            {
                if (SockLib.BytesAvailable(_recvSocket) > 0)
                {
                    if (SockLib.ReceiveMessage(_recvSocket, _recvBuffer) > 0)
                    {
                        //TODO: Apparently, you cannot get ip and/or port address of a udp socket... need to write values to payload...
                        //var remoteIp = SockLib.GetRemoteIpAddress(_recvSocket);
                        //var remotePort = SockLib.GetRemotePort(_recvSocket);
                        Buffer.FinalizeBuffer(_recvBuffer);
                        MessageRecieved(new KeyValuePair <string, int>("127.0.0.1", 1025), Buffer.GetBuffer(_recvBuffer));
                    }
                }
            }
            //RecvThreadDeathNotification();
        }
예제 #11
0
        public TestServerUdp()
        {
            _receiveBuffer = Buffer.New();
            _sendBuffer = Buffer.New();

            var listenSocket = SockLib.TcpListen(14804);
            var client = SockLib.TcpAccept(listenSocket);
            var clientIp = SockLib.GetRemoteIpAddress(client);

            _localSocket = SockLib.UdpConnect(LocalUdpPort);

            SendTestMessage(clientIp);

            ReceiveTestResponse();

            while (true)
            {
                //Here so the main thread runs continuously.
            }
        }