예제 #1
0
 public NamedPipeClient(string pipeName)
 {
     replyqueue          = new List <queuemsg <T> >();
     pipe                = new NamedPipeWrapper.NamedPipeClient <T>(pipeName);
     pipe.AutoReconnect  = true;
     pipe.Disconnected  += (sender) => { Disconnected?.Invoke(); };
     pipe.Connected     += (sender) => { Connected?.Invoke(); };
     pipe.Error         += (e) => { Error?.Invoke(e); };
     pipe.ServerMessage += (sender, message) => {
         var queue = replyqueue.Where(x => x.messageid == message.messageid).FirstOrDefault();
         if (queue != null)
         {
             // Log.Information("received reply for " + message.messageid + " " + string.Format("Time elapsed: {0:mm\\:ss\\.fff}", queue.sw.Elapsed));
             if (queue.Received)
             {
                 return;
             }
             queue.result   = message;
             queue.Received = true;
             if (queue.autoReset != null)
             {
                 queue.autoReset.Set();
             }
             return;
         }
         else
         {
             // Log.Information("received reply for unknown message id: " + message.messageid);
         }
         ServerMessage?.Invoke(message);
     };
 }
예제 #2
0
        public WindowsPipeClient(string channel, bool autoReconnect = false)
        {
            client = new NamedPipeWrapper.NamedPipeClient <BaseMessage>(channel);

            client.Connected     += (conn) => Connected?.Invoke();
            client.Disconnected  += (conn) => Disconnected?.Invoke();
            client.ServerMessage += (conn, msg) => ServerMessage?.Invoke(msg);
            client.Error         += (ex) => Error?.Invoke(ex);
        }
예제 #3
0
        public NamedPipeClient(string pipeName)
        {
            if (System.Threading.Monitor.TryEnter(lockobj, Config.local.thread_lock_timeout_seconds * 1000))
            {
                try
                {
                    replyqueue = new List <queuemsg <T> >();
                }
                finally
                {
                    System.Threading.Monitor.Exit(lockobj);
                }
            }
            pipe = new NamedPipeWrapper.NamedPipeClient <T>(pipeName);
            pipe.AutoReconnect  = true;
            pipe.Disconnected  += (sender) => { Disconnected?.Invoke(); };
            pipe.Connected     += (sender) => { Connected?.Invoke(); };
            pipe.Error         += (e) => { Error?.Invoke(e); };
            pipe.ServerMessage += (sender, message) =>
            {
                queuemsg <T> queue = null;
                if (System.Threading.Monitor.TryEnter(lockobj, Config.local.thread_lock_timeout_seconds * 1000))
                {
                    try
                    {
                        queue = replyqueue.Where(x => x != null && x.messageid == message.messageid).FirstOrDefault();
                    }
                    finally
                    {
                        System.Threading.Monitor.Exit(lockobj);
                    }
                }


                if (queue != null)
                {
                    // Log.Information("received reply for " + message.messageid + " " + string.Format("Time elapsed: {0:mm\\:ss\\.fff}", queue.sw.Elapsed));
                    if (queue.Received)
                    {
                        return;
                    }
                    queue.result   = message;
                    queue.Received = true;
                    if (queue.autoReset != null)
                    {
                        queue.autoReset.Set();
                    }
                    return;
                }
                else
                {
                    // Log.Information("received reply for unknown message id: " + message.messageid);
                }
                ServerMessage?.Invoke(message);
            };
        }
예제 #4
0
 public NamedPipeClient(string pipeName)
 {
     replyqueue          = new List <queuemsg <T> >();
     pipe                = new NamedPipeWrapper.NamedPipeClient <T>(pipeName);
     pipe.AutoReconnect  = true;
     pipe.Disconnected  += (sender) => { Disconnected?.Invoke(); };
     pipe.Connected     += (sender) => { Connected?.Invoke(); };
     pipe.Error         += (e) => { Error?.Invoke(e); };
     pipe.ServerMessage += (sender, message) => {
         var queue = replyqueue.Where(x => x.messageid == message.messageid).FirstOrDefault();
         if (queue != null)
         {
             queue.result = message;
             queue.autoReset.Set();
             return;
         }
         ServerMessage?.Invoke(message);
     };
 }
예제 #5
0
파일: Plugin.cs 프로젝트: max620/openrpa
 private void Client_Signedin(Interfaces.entity.TokenUser user)
 {
     if (pipe != null)
     {
         return;
     }
     try
     {
         pipe                = new OpenRPA.NamedPipeWrapper.NamedPipeClient <RPAMessage>("openrpa_service");
         pipe.Connected     += Pipe_Connected;
         pipe.Disconnected  += Pipe_Disconnected;
         pipe.Error         += Pipe_Error;
         pipe.ServerMessage += Pipe_ServerMessage;
         pipe.Start();
     }
     catch (Exception ex)
     {
         Log.Error(ex.ToString());
     }
 }