예제 #1
0
        public override void Execute()
        {
            base.Execute();
            Source.RemoveAllPendingInvites();
            Destination.RemoveAllPendingInvites();

            var sourceNewSessionId = SessionsRepository.GetSessionId(Source);
            var initialPacket      = new Packet(Operation.GetId, Status.Initial, sourceNewSessionId, Source.Id);

            Source.SendTo(PacketFormatter.Serialize(initialPacket));
        }
예제 #2
0
 public void SetSymmetricAlgorithm(SymmetricAlgorithm encryptionAlgorithm)
 {
     if (encryptionAlgorithm == null)
     {
         _packetFormatter = new PacketFormatter();
     }
     else
     {
         _packetFormatter = new SymmetricEncryptionPacketFormatter(encryptionAlgorithm);
     }
 }
예제 #3
0
        public NetworkClient(Socket socket, CancellationTokenSource stopTokenSource, CommandManager commandManager)
        {
            _socket = socket;
            _parentStopTokenSource   = stopTokenSource;
            _internalStopTokenSource = new CancellationTokenSource();

            _packetFormatter   = new PacketFormatter();
            _commandManager    = commandManager;
            _messageManager    = new MessageManager(_commandManager, this);
            _messageSerializer = new BinaryFormatterSerializer();
        }
예제 #4
0
        private void 一键格式化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string selected_text = Frm.r_txt_log.Text.ClearSpecialSymbols();

            if (string.IsNullOrEmpty(selected_text))
            {
                return;
            }
            string ret = new PacketFormatter().Parse(Unpooled.WrappedBuffer(selected_text.DecodeHex()));

            Frm.Log("\n\n{0}\n\n", ret);
        }
예제 #5
0
        public void Packet_Should_Serialize_Correctly()
        {
            var packet = new Packet(Operation.Invite, Status.Ok, Guid.Empty, 12345, new Timestamp(new DateTime(2018, 1, 1)));

            packet.SetMessage("Accepted");
            packet.SetDestinationId(12);
            var formatter = new PacketFormatter();
            var array     = formatter.Serialize(packet);
            var result    = Encoding.UTF8.GetString(array);

            const string expected =
                "Identyfikator-)12345(|Operacja-)Invite(|Status-)Ok(|timestamp-)1514764800(|sid-)00000000-0000-0000-0000-000000000000(|destination-)12(|message-)Accepted(|";

            Assert.Equal(expected, result);
        }
예제 #6
0
        public NetworkClient(Socket socket, CancellationTokenSource stopTokenSource, CommandManager commandManager, SymmetricAlgorithm encryptionAlgorithm)
        {
            _socket = socket;
            _parentStopTokenSource   = stopTokenSource;
            _internalStopTokenSource = new CancellationTokenSource();

            if (encryptionAlgorithm == null)
            {
                _packetFormatter = new PacketFormatter();
            }
            else
            {
                _packetFormatter = new SymmetricEncryptionPacketFormatter(encryptionAlgorithm);
            }

            _commandManager    = commandManager;
            _messageManager    = new MessageManager(_commandManager, this);
            _messageSerializer = new BinaryFormatterSerializer();
        }
예제 #7
0
        private async Task Accept(Func <byte[], Task <byte[]> > callback)
        {
            //run this through Task.Run so we can respond to the waitToken if its called for.
            using (var client = await Task.Run(() => tcpListener.AcceptTcpClientAsync(), _waitToken))
            {
                if (_waitToken.IsCancellationRequested)
                {
                    return;
                }
                client.Client.NoDelay = true;
                //client.Client.LingerState = new LingerOption(true, 0);
                var readBuffer = new byte[32768];

                using (var stream = client.GetStream())
                {
                    using (var memoryStream = new MemoryStream())
                    {
                        while (true)
                        {
                            using (var readTokenSource = new CancellationTokenSource(readTimeout))
                            {
                                readTokenSource.Token.Register(() =>
                                {
                                    if (memoryStream != null)
                                    {
                                        memoryStream.Close();
                                        memoryStream.Dispose();
                                    }

                                    if (stream != null)
                                    {
                                        stream.Close();
                                        stream.Dispose();
                                    }

                                    if (client != null)
                                    {
                                        //if (client.Client != null) client.Client.Disconnect(false);
                                        client.Close();
                                        client.Dispose();
                                    }

                                    readBuffer = null;
                                });

                                var read = await stream.ReadAsync(readBuffer, 0, readBuffer.Length,
                                                                  readTokenSource.Token);

                                if (read > 0)
                                {
                                    if (readBuffer[0] == 63)
                                    {
                                        var payload = _serializer.Serialize(new
                                        {
                                            _configuration?.DebugMode,
                                            _configuration?.Environment,
                                            _configuration?.Version,
                                            Owner = _onReceived?.GetMethodInfo()?.DeclaringType?.FullName,
                                            Counter,
                                            Environment.WorkingSet,
                                            Environment.MachineName,
                                            OnlineSince             = _captureAndAggregate.StartDateTimeOffset,
                                            OnlineDurationInSeconds =
                                                (DateTimeOffset.UtcNow - _captureAndAggregate.StartDateTimeOffset)
                                                .TotalSeconds,
                                            TotalAverage        = _captureAndAggregate.TotalAverage(),
                                            Last5SecondsAverage = _captureAndAggregate.Last5SecondsAverage()
                                        });
                                        await stream.WriteAsync(payload, 0, payload.Length, _waitToken);

                                        await stream.FlushAsync(_waitToken);

                                        break;
                                    }

                                    if (read > 0)
                                    {
                                        await memoryStream.WriteAsync(readBuffer, 0, read, _waitToken);
                                    }

                                    if (read <= 0 || readBuffer[read - 1] == PacketFormatter?.PacketTerminator)
                                    {
                                        var data = memoryStream.ToArray();
                                        if (PacketFormatter != null)
                                        {
                                            data = PacketFormatter.RemoveFooter(data);
                                        }

                                        //Client is done sending, process the packet
                                        var result = await callback(data);

                                        if (result != null && result.Any())
                                        {
                                            if (PacketFormatter != null)
                                            {
                                                result = PacketFormatter.AddFooter(result);
                                            }
                                            await stream.WriteAsync(result, 0, result.Length, _waitToken);

                                            await stream.FlushAsync(_waitToken);
                                        }

                                        result = null;
                                        data   = null;
                                        break;
                                    }
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }

                        memoryStream.Close();
                        memoryStream.Dispose();
                    }

                    stream.Close();
                    stream.Dispose();
                }

                readBuffer = null;
                client.Client.Disconnect(false);
                client.Close();
                client.Dispose();
            }
        }