Пример #1
0
 public virtual Task SendMessageAsync(IpcMessage message)
 {
     throw new NotSupportedException("This platform does not implement IPC.");
 }
Пример #2
0
 protected void OnMessageReceived(IpcMessage message) => MessageReceived?.Invoke(message);
Пример #3
0
 public override Task SendMessageAsync(IpcMessage message) => ipcProvider.SendMessageAsync(message);
Пример #4
0
        public override Task SendMessageAsync(IpcMessage message)
        {
            ensureIPCReady();

            return(ipcProvider.SendMessageAsync(message));
        }
Пример #5
0
        public async Task StartAsync()
        {
            var token = cancelListener.Token;

            try
            {
                while (!token.IsCancellationRequested)
                {
                    while (!listener.Pending())
                    {
                        await Task.Delay(10, token).ConfigureAwait(false);

                        if (token.IsCancellationRequested)
                        {
                            return;
                        }
                    }

                    using (var client = await listener.AcceptTcpClientAsync().ConfigureAwait(false))
                    {
                        using (var stream = client.GetStream())
                        {
                            byte[] header = new byte[sizeof(int)];
                            await stream.ReadAsync(header.AsMemory(), token).ConfigureAwait(false);

                            int    len  = BitConverter.ToInt32(header, 0);
                            byte[] data = new byte[len];
                            await stream.ReadAsync(data.AsMemory(), token).ConfigureAwait(false);

                            string str  = Encoding.UTF8.GetString(data);
                            var    json = JToken.Parse(str);

                            var type  = Type.GetType(json["Type"].Value <string>());
                            var value = json["Value"];

                            Trace.Assert(type != null);
                            Trace.Assert(value != null);

                            var msg = new IpcMessage
                            {
                                Type  = type.AssemblyQualifiedName,
                                Value = JsonConvert.DeserializeObject(value.ToString(), type),
                            };

                            MessageReceived?.Invoke(msg);
                        }
                    }
                }
            }
            catch (TaskCanceledException)
            {
            }
            finally
            {
                try
                {
                    listener.Stop();
                }
                catch
                {
                }
            }
        }
Пример #6
0
 public override async Task SendMessageAsync(IpcMessage message)
 {
     await ipcProvider.SendMessageAsync(message);
 }