public static void Main(string[] args) { var logger = new LoggerStub(); // using (var logger = new ConsoleLoggerWrapper(new LoggerStub())) // { Helpers.LogCurrentMemoryUsage(logger); // Console.ReadLine(); var messagePackSerializerFactory = new MessagePackSerializerFactory(); var rpcTcpServicePublisher = new RpcTcpServicePublisher(messagePackSerializerFactory, logger); var defaultServiceTimeout = TimeSpan.FromMinutes(1); var testService = new TestService(logger); using (new DisposableCollectionHolder( rpcTcpServicePublisher.PublishUnsecured <ITestService>( testService, defaultServiceTimeout))) { using (ServiceHostContainerFactory.Create <TestService, ITestService>()) { Console.WriteLine("Services started. Press Enter to stop."); Console.ReadLine(); Helpers.LogCurrentMemoryUsage(logger); } } // } Console.WriteLine("Services stopped."); }
private static RpcTcpServer <ITestService> GetTestService(ISerializerFactory serializerFactory) { var callsCount = 0; var serviceInstance = new TestService(() => callsCount++); var servicePublisher = new RpcTcpServicePublisher(serializerFactory, new LoggerStub()); return(servicePublisher.PublishUnsecured <ITestService>(serviceInstance, TimeSpan.FromMinutes(1))); }
public void ServerTest() { var callsCount = 0; var serviceInstance = new TestService(() => callsCount++); var serializerFactory = new MessagePackSerializerFactory(); var servicePublisher = new RpcTcpServicePublisher(serializerFactory, new LoggerStub()); using (servicePublisher.PublishUnsecured <ITestService>(serviceInstance, TimeSpan.FromMinutes(1))) { PerformTestWithConnectedNetworkStream(networkStream => { var argumentsData = new byte[1][]; argumentsData[0] = serializerFactory .CreateSerializer <SerializableObject>() .Serialize(SerializableObject.GetTestInstance()); var rpcMessage = serializerFactory.CreateSerializer <RpcMessage>().Serialize(new RpcMessage() { ServiceCode = typeof(ITestService).FullName.GetHashCode(), OperationCode = 0, ArgumentsData = argumentsData }); networkStream.Write(rpcMessage, 0, rpcMessage.Length); networkStream.WriteEndOfSessionMessage(); var data = new List <byte>(); var dataChunk = new byte[128]; do { var bytesRead = networkStream.Read(dataChunk, 0, dataChunk.Length); data.AddRange(dataChunk.Take(bytesRead).ToArray()); } while (networkStream.DataAvailable); var serviceCallResult = serializerFactory.CreateSerializer <ServiceCallResult>().Deserialize(data.ToArray()); var result = serializerFactory.CreateSerializer <int>().Deserialize(serviceCallResult.ReturnValue); Assert.Equal(SerializableObject.TestInt, result); }); PerformTestWithConnectedNetworkStream(networkStream => { var argumentsData = new byte[2][]; argumentsData[0] = serializerFactory.CreateSerializer <int>().Serialize(0); argumentsData[1] = serializerFactory.CreateSerializer <int>().Serialize(2); var rpcMessage = serializerFactory.CreateSerializer <RpcMessage>().Serialize(new RpcMessage() { ServiceCode = typeof(ITestService).FullName.GetHashCode(), OperationCode = 3, ArgumentsData = argumentsData }); networkStream.Write(rpcMessage, 0, rpcMessage.Length); networkStream.WriteEndOfSessionMessage(); var data = new List <byte>(); var dataChunk = new byte[128]; do { var bytesRead = networkStream.Read(dataChunk, 0, dataChunk.Length); data.AddRange(dataChunk.Take(bytesRead).ToArray()); } while (networkStream.DataAvailable); var serviceCallResult = serializerFactory.CreateSerializer <ServiceCallResult>().Deserialize(data.ToArray()); var resultTuple = serializerFactory.CreateSerializer <(int count, SerializableObject[] objects)>() .Deserialize(serviceCallResult.ReturnValue); Assert.Equal(2, resultTuple.count); Assert.Equal(SerializableObject.TestInt, resultTuple.objects[0].IntProperty); Assert.Equal(SerializableObject.TestString, resultTuple.objects[0].StringProperty); Assert.Equal(SerializableObject.TestDouble, resultTuple.objects[0].NestedObject.DoubleProperty); }); } }