public void Serialize_Deserialize()
        {
            var serializer = new ProtobufMessageSerializer();
            var testMessage = new TestMessage
            {
                Boolean = true,
                Guid = Guid.NewGuid(),
                Int32 = -1234,
                Int64 = -12345678,
                String = "some text"
            };
            var serializedMessage = serializer.Serialize(testMessage);

            using (var mem = new MemoryStream(serializedMessage))
            {
                mem.Position = 2;
                var deserializedMessage = Serializer.Deserialize<TestMessage>(mem);

                Assert.AreEqual(testMessage.Boolean, deserializedMessage.Boolean);
                Assert.AreEqual(testMessage.Guid, deserializedMessage.Guid);
                Assert.AreEqual(testMessage.Int32, deserializedMessage.Int32);
                Assert.AreEqual(testMessage.Int64, deserializedMessage.Int64);
                Assert.AreEqual(testMessage.String, deserializedMessage.String);
            }
        }
        public void Serialize_serializes_MessageTypeId()
        {
            var serializer = new ProtobufMessageSerializer();
            var testMessage = new TestMessage();
            var serializedMessage = serializer.Serialize(testMessage);

            using (var mem = new MemoryStream(serializedMessage))
            using (var reader = new BinaryReader(mem))
            {
                var messageTypeId = reader.ReadUInt16();
                Assert.AreEqual(messageTypeId, testMessage.MessageTypeId);
            }
        }
        static void Main(string[] args)
        {
            //configure serialization
            var messageSerializer = new ProtobufMessageSerializer(
                new Message[] { new JoinRoom(), new Say(), new RoomEvent(), new JoinRoomResponse() },
                new MessageHeader[] { new OperationHeader() });

            var logger = new LoggerConfiguration()
                         .ConfigureMOUSETypesDestructure()
                         .MinimumLevel.Verbose()
                         .WriteTo.ColoredConsole()
                         .CreateLogger();

            var coreEventLogger = new SerilogCoreEvents(logger);

            //configure network transport provider
            var transport = new LidgrenNetProvider(
                new NetPeerConfiguration("Public")
            {
                LocalAddress = IPAddress.Loopback
            },
                new SerilogLidgrenEvents(logger));
            var config = new NetNodeConfig {
                SendTimeoutSec = 30, ConnectTimeoutSec = 60
            };


            var node = new NetNode <NetChannel>("client", transport, coreEventLogger, messageSerializer, config: config,
                                                channelFactory: (n, transportChannel) =>
            {
                var peer = new NetChannel(n, transportChannel, messageSerializer, coreEventLogger, config, new WcfBufferPool());
                //low level channel handling declaration uses Rx channel.OperationReceivedEvent under the hood
                peer.RegisterHandler <RoomEvent>(msg => Console.WriteLine(msg.UserName + "->" + msg.Text));

                return(peer);
            });

            try
            {
                Run(node).Wait();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadKey();
        }
Exemplo n.º 4
0
        static async Task Main(string[] args)
        {
            var services = new ServiceCollection()
                           .AddLogging(x =>
            {
                x.ClearProviders();
                x.AddConsole();
            })
                           .BuildServiceProvider();

            var serviceDescriptor = new ServiceDiscoveryMessage()
            {
                IpAddress  = ByteString.CopyFrom(IPUtils.GetLocalIpAddress().GetAddressBytes()),
                Port       = 8765,
                ServerName = Environment.MachineName
            };

            var logger       = services.GetRequiredService <ILogger <PhoneRemoteServiceBroadcaster <IMessage> > >();
            var serverLogger = services.GetRequiredService <ILogger <PhoneRemoteServer <IMessage> > >();

            var serializer  = new ProtobufMessageSerializer();
            var broadcaster = new PhoneRemoteServiceBroadcaster <IMessage>(serializer, serviceDescriptor, logger);
            var server      = new PhoneRemoteServer <IMessage>(serializer, new IPEndPoint(new IPAddress(serviceDescriptor.IpAddress.Span), serviceDescriptor.Port), serverLogger);

            broadcaster.StartListenForClients();

            Console.WriteLine("Listening on local..");
            await server.WaitForConnectionAsync(CancellationToken.None);

            Console.WriteLine("Got connection. Listening for messages..");

            var cursor = CursorUtils.GetCursorInfo();

            await foreach (var action in server.WaitForMessageAsync <CursorAction>(CancellationToken.None))
            {
                //Console.SetCursorPosition(0, 2);

                //cursor.ptScreenPos.x += pos.DX;
                //cursor.ptScreenPos.y += pos.DY;

                //Console.WriteLine($"dx,dy={pos.DX},{pos.DY}");

                CursorUtils.DispatchMouseEvent(action);
            }
        }
Exemplo n.º 5
0
        private IRendezvousService Build()
        {
            var logger              = resolver.Resolve <ILogger>();
            var applicationConfig   = resolver.Resolve <RendezvousServiceConfiguration>();
            var socketFactory       = new SocketFactory(applicationConfig.Socket);
            var synodConfigProvider = new SynodConfigurationProvider(applicationConfig.Synod);

#if NET47
            var instanceNameResolver = resolver.Resolve <IInstanceNameResolver>() ?? new InstanceNameResolver();

            var performanceCounterManager = new PerformanceCounterManager <KinoPerformanceCounters>(instanceNameResolver,
                                                                                                    logger);
#else
            var performanceCounterManager = default(IPerformanceCounterManager <KinoPerformanceCounters>);
#endif
            var intercomMessageHub = new IntercomMessageHub(socketFactory,
                                                            synodConfigProvider,
                                                            performanceCounterManager,
                                                            logger);
            var ballotGenerator    = new BallotGenerator(applicationConfig.Lease);
            var roundBasedRegister = new RoundBasedRegister(intercomMessageHub,
                                                            ballotGenerator,
                                                            synodConfigProvider,
                                                            applicationConfig.Lease,
                                                            logger);
            var leaseProvider = new LeaseProvider(roundBasedRegister,
                                                  ballotGenerator,
                                                  applicationConfig.Lease,
                                                  synodConfigProvider,
                                                  logger);

            var serializer     = new ProtobufMessageSerializer();
            var configProvider = new RendezvousConfigurationProvider(applicationConfig.Rendezvous);
            var service        = new RendezvousService(leaseProvider,
                                                       synodConfigProvider,
                                                       socketFactory,
                                                       serializer,
                                                       configProvider,
                                                       performanceCounterManager,
                                                       logger);

            return(service);
        }
    public void ShouldSerializeAndDeserialize()
    {
        var sut = new ProtobufMessageSerializer(new[] { typeof(TestMessage) });

        var serialized = sut.Serialize(new TestMessage
        {
            Value  = "value",
            Age    = 50,
            Values = new List <string> {
                "abc"
            }
        });

        var deserialized = sut.Deserialize(serialized, typeof(TestMessage)) as TestMessage;

        Assert.Equal("value", deserialized !.Value);
        Assert.Equal(50, deserialized !.Age);
        Assert.Single(deserialized.Values);
        Assert.Equal("abc", deserialized.Values.First());
    }
Exemplo n.º 7
0
        static NetNode <NetChannel> CreateNode(string nodeName, int port, INetNodeConfig nodeConfig = null)
        {
            var messageSerializer = new ProtobufMessageSerializer(
                new Message[] { new EmptyMessage(), new TestRequestMessage(), new TestReplyMessage() },
                new MessageHeader[] { new OperationHeader() });

            var coreEventLogger = Substitute.For <ICoreEvents>();

            var config = nodeConfig ?? new NetNodeConfig()
            {
                ConnectTimeoutSec = 1, SendTimeoutSec = 1
            };

            return(new NetNode <NetChannel>(nodeName,
                                            new LidgrenNetProvider(
                                                new NetPeerConfiguration("Test")
            {
                PingInterval = 0.5f, ConnectionTimeout = 1, MaximumConnections = 10, AcceptIncomingConnections = true, Port = port
            },
                                                Substitute.For <ILidgrenEvents>()),
                                            coreEventLogger, messageSerializer, (node, transport) => new NetChannel(node, transport, messageSerializer, coreEventLogger, config, new WcfBufferPool()), nodeConfig ?? config));
        }