Exemplo n.º 1
0
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="message">The message to send.</param>
        public Task SendAsync(ISenderMessage message)
        {
            var shouldCompress = message.ShouldCompress(_compressed);

            var stringValue = shouldCompress
                ? MessageCompression.Compress(message.StringValue)
                : message.StringValue;

            var namedPipeMessage = new NamedPipeMessage
            {
                StringValue   = stringValue,
                MessageFormat = message.MessageFormat,
                Priority      = message.Priority,
                Headers       = new Dictionary <string, string>()
            };

            var originatingSystemAlreadyExists = false;

            foreach (var header in message.Headers)
            {
                if (header.Key == HeaderName.OriginatingSystem)
                {
                    originatingSystemAlreadyExists = true;
                }

                namedPipeMessage.Headers.Add(header.Key, header.Value);
            }

            namedPipeMessage.Headers[HeaderName.MessageFormat] = message.MessageFormat.ToString();

            if (!originatingSystemAlreadyExists)
            {
                namedPipeMessage.Headers[HeaderName.OriginatingSystem] = "NamedPipe";
            }

            if (shouldCompress)
            {
                namedPipeMessage.Headers[HeaderName.CompressedPayload] = "true";
            }

            var messageString = _serializer.SerializeToString(namedPipeMessage);

            _messages.Add(messageString);

            return(_completedTask);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="NamedPipeReceiverMessage"/> class.
 /// </summary>
 /// <param name="namedPipeMessage">The message that was sent.</param>
 internal NamedPipeReceiverMessage(NamedPipeMessage namedPipeMessage)
 {
     _namedPipeMessage = namedPipeMessage;
 }
Exemplo n.º 3
0
        private void BW_NPipe_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            /*
             * var server = new NamedPipeServer("npstest");
             * server.StartListen();
             *
             * while (work)
             * {
             *  sw.Restart();
             *  var _in = server.AwaitSingleMessageAsync<char[]>().Result;
             *  string s = new string(_in.Message);
             *  Console.WriteLine("<<" + s);
             *  Task.Run(async () =>
             *  {
             *      if(await is_pinged()) responce = GetFromNet();
             *          else
             *          {
             *              responce = "NOT PINGED";
             *          }
             *      ;
             *      await server.SendMessageToAllAsync(responce+">>" + s);
             *  }).Wait(1000);
             *  sw.Stop();
             *  if(sw.ElapsedMilliseconds < 1000) Thread.Sleep((int)(1000-sw.ElapsedMilliseconds));
             * }
             */
            Console.WriteLine("CALL" + work + "|" + (server == null));

            bool   work_now = true;
            string s        = "";
            int    trys     = 99;

            while (server == null)
            {
                NewServer();
                trys--;
                Task.Delay(1000);
                if (trys == 0)
                {
                    throw new Exception("BAD DAY");
                }
            }
            //else
            if (server != null)
            {
                var _1 = server.AwaitSingleMessageAsync <char[]>(ct);
                _1.ConfigureAwait(false);

                var _3 = _1.GetAwaiter();
                NamedPipeMessage <char[]> _4 = null;
                try
                {
                    _4 = _3.GetResult();
                }
                catch (OperationCanceledException OCE)
                {
                    Console.WriteLine(OCE);
                    work_now = false;
                }
                catch (NullReferenceException NRE)
                {
                    Console.WriteLine(NRE);
                    work_now = false;
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception);
                    throw;
                }

                if (work_now && work)
                {
                    Task.Run(async() =>
                    {
                        if (_4 == null)
                        {
                            return;
                        }

                        s = new string(_4.Message);

                        //fastColoredTextBox1.AppendText("\n" + s + "<<");
                        if (await is_pinged().ConfigureAwait(false))
                        {
                            responce = GetFromNet();
                        }
                        else
                        {
                            responce = "NOT PINGED";
                        }

                        await server.SendMessageToAllAsync("\n" + responce + "|>>" + s, ct)
                        .ConfigureAwait(false);
                    }, ct).Wait(10000, ct);
                }
            }
        }