コード例 #1
0
        private static void Main(string[] args)
        {
            // The client and server must agree on the interface id to use:
            var iid = new Guid("{1B617C4B-BF68-4B8C-AE2B-A77E6A3ECEC5}");

            bool attempt = true;
            while (attempt)
            {
                attempt = false;
                // Open the connection based on the endpoint information and interface IID
                using (var client = new RpcClientApi(iid, RpcProtseq.ncalrpc, null, "RpcExampleClientServer"))
                    //using (var client = new RpcClientApi(iid, RpcProtseq.ncacn_ip_tcp, null, @"18081"))
                {
                    // Provide authentication information (not nessessary for LRPC)
                    client.AuthenticateAs(RpcClientApi.Self);

                    // Send the request and get a response
                    try
                    {
                        var response = client.Execute(Encoding.UTF8.GetBytes(args.Length == 0 ? "Greetings" : args[0]));
                        Console.WriteLine("Server response: {0}", Encoding.UTF8.GetString(response));
                    }
                    catch (RpcException rx)
                    {
                        if (rx.RpcError == RpcError.RPC_S_SERVER_UNAVAILABLE || rx.RpcError == RpcError.RPC_S_SERVER_TOO_BUSY)
                        {
                            //Use a wait handle if your on the same box...
                            Console.Error.WriteLine("Waiting for server...");
                            System.Threading.Thread.Sleep(1000);
                            attempt = true;
                        }
                        else
                            Console.Error.WriteLine(rx);
                    }
                    catch (Exception ex)
                    {
                        Console.Error.WriteLine(ex);
                    }
                }
            }
            // done...
            Console.WriteLine("Press [Enter] to exit...");
            Console.ReadLine();
        }
コード例 #2
0
ファイル: Logger.cs プロジェクト: perpetual-motion/clrplus
        public override void Initialize(IEventSource eventSource)
        {
            if (eventSource == null) {
                return;
            }

            var p = Parameters.Split(';');

            if (p.Length < 2) {
                throw new Exception("Requires at least pipeName and guid");
            }

            var pipeName = p[0];
            var iid = new Guid(p[1]);

            _client = new RpcClientApi(iid, RpcProtseq.ncacn_np, null, pipeName);
            messagePump = Task.Factory.StartNew(() => {
                try {
                    BuildMessage msg;

                    while (!stop || _messages.Count > 0) {
                        if (_messages.TryDequeue(out msg)) {
                            var result = _client.Execute(msg.ToByteArray());
                            if (result.Length > 0 && result[1] == 0x01) {
                                // we've been asked to kill ourselves.
                                stop = true;
                            }
                            continue;
                        }
                        Thread.Sleep(5);
                    }
                }
                finally {
                    stop = true;
                }

            });

            eventSource.BuildFinished += eventSource_BuildFinished;
            eventSource.BuildStarted += eventSource_BuildStarted;
            eventSource.CustomEventRaised += eventSource_CustomEventRaised;
            eventSource.ErrorRaised += eventSource_ErrorRaised;
            eventSource.MessageRaised += eventSource_MessageRaised;
            eventSource.ProjectFinished += eventSource_ProjectFinished;
            eventSource.ProjectStarted += eventSource_ProjectStarted;
            //eventSource.StatusEventRaised += eventSource_StatusEventRaised;
            eventSource.TargetFinished += eventSource_TargetFinished;
            eventSource.TargetStarted += eventSource_TargetStarted;
            eventSource.TaskFinished += eventSource_TaskFinished;
            eventSource.TaskStarted += eventSource_TaskStarted;
            eventSource.WarningRaised += eventSource_WarningRaised;
        }
コード例 #3
0
ファイル: Logger.cs プロジェクト: perpetual-motion/clrplus
        public void Dispose()
        {
            stop = true;
            if (messagePump != null) {
                messagePump.Wait();
            }

            if (_client != null) {
                _client.Dispose();
                _client = null;
            }
        }
コード例 #4
0
 public Win32RpcClient(Guid iid, string protocol, string server, string endpoint)
 {
     _client = new RpcClientApi(iid, Parse(protocol), server, endpoint);
 }