コード例 #1
0
        private static void Main(string[] args)
        {
            var db       = new Database.Database("db.txt", new DbSerializer());
            var registry = new HandlersRegistry();

            registry.Reg(new AddGood().GetType(), new AddGoodCommandHandler(db));
            registry.Reg(new AddCategory().GetType(), new AddCategoryCommandHandler(db));
            registry.Reg(new AddUser().GetType(), new AddUserCommandHandler(db));

            registry.Reg(new RemoveGood().GetType(), new RemoveGoodCommandHandler(db));
            registry.Reg(new RemoveCategory().GetType(), new RemoveCategoryCommandHandler(db));
            registry.Reg(new RemoveUser().GetType(), new RemoveUserCommandHandler(db));

            registry.Reg(new AddReference().GetType(), new AddReferenceCommandHandler(db));
            registry.Reg(new RemoveReference().GetType(), new RemoveReferenceCommandHandler(db));

            registry.Reg(new SelectByCategoryId().GetType(), new SelectByCategoryIdCommandHandler(db));
            registry.Reg(new SelectByUserId().GetType(), new SelectByUserIdCommandHandler(db));
            registry.Reg(new SelectByGoodId().GetType(), new SelectByGoodIdCommandHandler(db));

            registry.Reg(new GetData().GetType(), new GetDataCommandHandler(db));

            registry.RegDefault(new DefaultCommandHandler(db));

            var tcpServer = new TcpServer(17777, registry, new Serializer.Serializer());

            Console.ReadKey();
            tcpServer.EndAccepting();
        }
コード例 #2
0
        public async Task Receives_Data_Over_Socket_Transport()
        {
            var transmittedMessages = new List <byte[]>();
            var receivedMessages    = new List <byte[]>();
            var receiveEvent        = new ManualResetEventSlim();

            HandlersRegistry.RegisterReceiveBufferHandler(reader =>
            {
                var data = reader.Read().ToArray();
                receivedMessages.Add(data);
                reader.Advance(data.Length);
                receiveEvent.Set();
            });

            await OpenConnectionAsync();

            foreach (var _ in new object[IterationCount])
            {
                var transmittingData = Guid.NewGuid().ToByteArray();
                await acceptedSocket.SendAsync(transmittingData, default);

                transmittedMessages.Add(transmittingData);

                Assert.True(receiveEvent.Wait(waitTimeout));

                receiveEvent.Reset();
            }

            Assert.Equal(transmittedMessages, receivedMessages);
        }
コード例 #3
0
        public void Sends_Stream_Header_To_Transmit_Pipe()
        {
            var sentHeader = default(XmlElement);

            HandlersRegistry.RegisterTransmitPipeHandler <XmlElement>(request => sentHeader = request);

            MessageSender.SendTransportMessage(TransportMessage.Opened);

            Assert.NotNull(sentHeader);
            Assert.Equal("stream:stream", sentHeader.Name);
        }
コード例 #4
0
        public TcpServer(int port, HandlersRegistry reg, Serializer.Serializer serializer)
        {
            Serializer = serializer;
            Registry   = reg;

            Server = new TcpListener(GetLocalIp(), port);
            Server.Start();
            StartAccepting();

            Console.WriteLine("Server started at " + Server.LocalEndpoint);
        }
コード例 #5
0
        public async Task SendUnsubscribeRequestAsync_Sends_Correct_Presence_Stanza()
        {
            var subscriptionJid = $"{Guid.NewGuid()}@domain.com";
            var expectedStanza  = PresenceStanza.New(PresenceStanza.Type.Unsubscribe).To(subscriptionJid);
            var actualStanza    = default(XmlElement);

            HandlersRegistry.RegisterTransmitPipeHandler <XmlElement>(e => actualStanza = e);

            await MessageSender.SendUnsubscribeRequestAsync(subscriptionJid);

            Assert.Equal(expectedStanza, actualStanza);
        }
コード例 #6
0
        public async Task SendRosterItemUpdateAsync_Sends_Correct_Request_Stanza()
        {
            var item           = new RosterItem("*****@*****.**", "user");
            var expectedStanza = CreateRosterStanza(IqStanza.Type.Set, item).From(jid);
            var actualStanza   = default(XmlElement);

            HandlersRegistry.RegisterTransmitPipeHandler <XmlElement>(s => actualStanza = s);

            var requestId = await MessageSender.SendRosterItemUpdateAsync(jid, item);

            expectedStanza.Id(requestId);

            Assert.Equal(expectedStanza, actualStanza);
        }
コード例 #7
0
        public async Task SendRosterRequestAsync_Sends_Roster_Request_Stanza()
        {
            var expectedStanza = CreateRosterStanza(IqStanza.Type.Get).From(jid);
            var actualStanza   = default(XmlElement);

            HandlersRegistry.RegisterTransmitPipeHandler <XmlElement>(s => actualStanza = s);

            var requestId = await MessageSender.SendRosterRequestAsync(jid);

            expectedStanza.Id(requestId);

            Assert.False(string.IsNullOrEmpty(requestId));
            Assert.Equal(expectedStanza, actualStanza);
        }
コード例 #8
0
 public SocketTransportTests() : base(services =>
 {
     var port = BasePort + Guid.NewGuid().ToByteArray()[0];
     services.AddClientSocket("localhost", port)
     .AddSocketListener(IPAddress.IPv6Loopback, port);
 })
 {
     acceptEvent = new();
     HandlersRegistry.RegisterHandler <SocketAcceptedEvent>(@event =>
     {
         acceptedSocket        = @event.Socket;
         @event.SocketAcquired = true;
         acceptEvent.Set();
     });
     var filter = GetRequiredService <ISerializationFilter>();
     filter.AddSerializer <Guid>((writer, guid) => writer.Write(guid.ToByteArray()));
 }
コード例 #9
0
        public void Can_Negotiate_Tls_Feature()
        {
            XmlElement sentElement      = default;
            bool?      setTlsSend       = default;
            var        featuresResponse = new XmlElement("stream:features", new XmlElement("starttls").Xmlns(XmppNamespaces.Tls));

            HandlersRegistry.RegisterTransmitPipeHandler <XmlElement>(request => sentElement           = request);
            HandlersRegistry.RegisterTransportMessageHandler(TransportMessage.SetTls, () => setTlsSend = true);

            MessageSender.SendTransportMessage(TransportMessage.Opened);
            MessageSender.SendToReceivePipe(StreamHeader.Client());
            MessageSender.SendToReceivePipe(featuresResponse);

            Assert.Equal("starttls", sentElement.Name);

            MessageSender.SendToReceivePipe(new XmlElement("proceed").Xmlns(XmppNamespaces.Tls));
            Assert.True(setTlsSend);
        }
コード例 #10
0
        public async Task SendStatusUpdateAsync_Sends_Correct_Presence_Stanza()
        {
            var expectedStatus = new PresenceStatus
            {
                AvailabilitySubstate = AvailabilitySubstate.Chat,
                StatusText           = Guid.NewGuid().ToString()
            };
            var token      = new CancellationToken();
            var sentStanza = default(XmlElement);

            HandlersRegistry.RegisterTransmitPipeHandler <XmlElement>(e => sentStanza = e);

            await MessageSender.SendStatusUpdateAsync(expectedStatus, token);

            Assert.NotNull(sentStanza);
            Assert.Equal(expectedStatus.StatusText, sentStanza.Child("status").Value);
            Assert.Equal(expectedStatus.AvailabilitySubstate.ToString().ToLower(), sentStanza.Child("show").Value);
        }
コード例 #11
0
        public async Task SendRosterItemRemoveRequestAsync_Sends_Correct_Request_Stanza()
        {
            var item           = new RosterItem("*****@*****.**", "user");
            var expectedStanza = CreateRosterStanza(IqStanza.Type.Set, item).From(jid);
            var itemElement    = expectedStanza.Child("query").Child("item");

            itemElement.SetAttributeValue("subscription", "remove");
            var actualStanza = default(XmlElement);

            HandlersRegistry.RegisterTransmitPipeHandler <XmlElement>(s => actualStanza = s);


            var requestId = await MessageSender.SendRosterItemRemoveRequestAsync(jid, item);

            expectedStanza.Id(requestId);

            Assert.Equal(expectedStanza, actualStanza);
        }