コード例 #1
0
 private static TcpPackage WrapCreateStream(ClientMessage.CreateStream msg)
 {
     var dto = new TcpClientMessageDto.CreateStream(msg.EventStreamId, msg.Metadata, msg.AllowForwarding, msg.IsJson);
     return new TcpPackage(TcpCommand.CreateStream, msg.CorrelationId, dto.Serialize());
 }
コード例 #2
0
        public bool Execute(CommandProcessorContext context, string[] args)
        {
            var eventStreamId = "test-stream";
            string metadata = null;

            if (args.Length > 0)
            {
                if (args.Length > 2)
                    return false;
                eventStreamId = args[0];
                if (args.Length > 1)
                    metadata = args[1];
            }

            context.IsAsync();
            var createStreamDto = new TcpClientMessageDto.CreateStream(
                    eventStreamId,
                    Guid.NewGuid().ToByteArray(), 
                    Encoding.UTF8.GetBytes(metadata ?? string.Format("{{\"StreamName\": \"{0}\"}}", eventStreamId)),
                    true,
                    metadata == null);
            var package = new TcpPackage(TcpCommand.CreateStream, Guid.NewGuid(), createStreamDto.Serialize());

            var sw = new Stopwatch();

            context.Client.CreateTcpConnection(
                    context,
                    connectionEstablished: conn =>
                    {
                        context.Log.Info("[{0}]: Trying to create stream '{1}'...", conn.EffectiveEndPoint, eventStreamId);
                        sw.Start();
                        conn.EnqueueSend(package.AsByteArray());
                    },
                    handlePackage: (conn, pkg) =>
                    {
                        if (pkg.Command != TcpCommand.CreateStreamCompleted)
                        {
                            context.Fail(reason: string.Format("Unexpected TCP package: {0}.", pkg.Command));
                            return;
                        }

                        sw.Stop();

                        var dto = pkg.Data.Deserialize<TcpClientMessageDto.CreateStreamCompleted>();
                        if (dto.Result == TcpClientMessageDto.OperationResult.Success)
                        {
                            context.Log.Info("Successfully created stream '{0}'.", eventStreamId);
                            PerfUtils.LogTeamCityGraphData(string.Format("{0}-latency-ms", Keyword), (int)sw.ElapsedMilliseconds);
                        }
                        else
                        {
                            context.Log.Info("Error while creating stream {0}: {1} ({2}).", eventStreamId, dto.Message, dto.Result);
                        }

                        context.Log.Info("Create stream request took: {0}.", sw.Elapsed);
                        conn.Close();
                        context.Success();
                    },
                    connectionClosed: (connection, error) =>
                    {
                        if (error == SocketError.Success)
                            context.Success();
                        else
                            context.Fail();
                    });

            context.WaitForCompletion();
            return true;
        }