/// <summary> /// Gets an available cached instance of the serializer. If one is not cached, generate a new one. /// </summary> /// <param name="message">Message to initialize the MqReader with. Null to just reset.</param> /// <returns>Cached serializer.</returns> public Serializer Get(MqMessage message = null) { Serializer serializer; // Try to get an existing cached serializer. if (_cachedContainers.TryDequeue(out serializer) == false) { // A cached serializer does not exist. Create a new one. var mqWriter = new MqMessageWriter(_config); var mqReader = new MqMessageReader(); serializer = new Serializer { MessageWriter = mqWriter, MessageReader = mqReader, Stream = new MemoryStream() }; } else { serializer.Stream.SetLength(0); serializer.MessageWriter.Clear(); } serializer.MessageReader.Message = message; return(serializer); }
private static void StartServer(int totalMessages, int totalClients) { var server = new MqServer <SimpleMqSession, MqConfig>(new MqConfig() { Ip = "127.0.0.1", Port = 2828 }); var builder = new MqMessageWriter((MqConfig)server.Config); builder.Write("COMPLETE"); var completeMessage = builder.ToMessage(true); builder.Write("START"); var startMessage = builder.ToMessage(true); ConcurrentDictionary <SimpleMqSession, ClientRunInfo> clientsInfo = new ConcurrentDictionary <SimpleMqSession, ClientRunInfo>(); server.Connected += (sender, session) => { var currentInfo = new ClientRunInfo() { Session = session.Session, Runs = 0 }; clientsInfo.TryAdd(session.Session, currentInfo); if (clientsInfo.Count == totalClients) { foreach (var mqSession in clientsInfo.Keys) { mqSession.Send(startMessage); } } }; server.Closed += (session, value) => { ClientRunInfo info; clientsInfo.TryRemove(value.Session, out info); }; server.IncomingMessage += (sender, args) => { var clientInfo = clientsInfo[args.Session]; // Count the total messages. clientInfo.Runs += args.Messages.Count; if (clientInfo.Runs == totalMessages) { args.Session.Send(completeMessage); args.Session.Send(startMessage); clientInfo.Runs = 0; } }; server.Start(); }
/// <summary> /// Create a RpcStream in reader mode. /// </summary> /// <param name="session">Session to write to.</param> public RpcByteTransport(RpcSession <TSession, TConfig> session, ushort id) { this.session = session; writer = new MqMessageWriter(this.session.Config); }
public MqMessageWriterReaderTests(ITestOutputHelper output) { Output = output; _messageBuilder = new MqMessageWriter(_config); _messageReader = new MqMessageReader(); }