public void Run()
        {
            var eventHubInterface = typeof(IEventHub);
            var eventHubInfo      = new EventHubInfo(eventHubInterface);

            var sb = new StringBuilder();

            sb.Append(BaseTemplate);

            foreach (var eventHub in eventHubInfo.EventHubs)
            {
                foreach (var @event in eventHub.Events)
                {
                    sb.AppendLine($"export interface {@event.ClassName} {{");
                    foreach (var parameter in @event.Parameters)
                    {
                        sb.AppendLine($"  {parameter.Name}: {parameter.TypescriptType};");
                    }
                    sb.AppendLine("}");
                    sb.AppendLine("");
                }

                sb.AppendLine("@Injectable({");
                sb.AppendLine("  providedIn: 'root'");
                sb.AppendLine("})");
                sb.AppendLine($"export class {eventHub.ClassName}Service {{");

                foreach (var @event in eventHub.Events)
                {
                    sb.AppendLine($"  private {@event.EventName.ToCamelCase()} = new Subject<{@event.ClassName}>();");
                }

                sb.AppendLine("");

                foreach (var @event in eventHub.Events)
                {
                    sb.AppendLine($"  public {@event.EventName.ToCamelCase()}$ = this.{@event.EventName.ToCamelCase()}.asObservable();");
                }

                sb.AppendLine("");

                sb.AppendLine("  constructor(private signalRService: SignalRService) {");
                foreach (var @event in eventHub.Events)
                {
                    sb.AppendLine(@$ "    this.signalRService.hubConnection.on('{@event.EventName}', ({string.Join(", ", @event.Parameters.Select(x => string.Concat(x.Name, " : ", x.TypescriptType)))}) =>");
                    sb.AppendLine(@$ "      this.{@event.EventName.ToCamelCase()}.next({{ {string.Join(", ", @event.Parameters.Select(x => x.Name))} }})");
                    sb.AppendLine("    );");
                }
                sb.AppendLine("  }");

                sb.AppendLine("}");
                sb.AppendLine("");
            }

            File.WriteAllText(Path.Combine(_appSettings.TargetDirectory, Constants.TargetFileName), sb.ToString());

            Console.WriteLine("Done.");
        }
        async static Task MainEx(string[] args)
        {
            var MAX_LIMIT    = 200;
            var eventHubInfo = new EventHubInfo
            {
                EventHubConnectionString = Environment.GetEnvironmentVariable("EHConnectionString"),
                EventHubPath             = Environment.GetEnvironmentVariable("EHPath"),
                NoOfMessages             = MAX_LIMIT
            };

            var submitter = new SensorReadingDataSubmitter();
            var status    = await submitter.Submit(eventHubInfo);

            Console.WriteLine("Submission Status : " + status);
            Console.WriteLine("Event Messages have been submitted successfully!");
        }
        public async Task <IActionResult> Submit([FromBody] EventHubInfo eventHubInfo)
        {
            var validation = eventHubInfo != default(EventHubInfo) &&
                             !string.IsNullOrEmpty(eventHubInfo.EventHubConnectionString) &&
                             !string.IsNullOrEmpty(eventHubInfo.EventHubPath) &&
                             eventHubInfo.NoOfMessages <= MAX_LIMIT;

            if (!validation)
            {
                return(BadRequest());
            }

            var status = await this.sensorReadingDataSubmitter.Submit(eventHubInfo);

            if (!status)
            {
                return(BadRequest());
            }

            return(Ok());
        }
        public async Task <bool> Submit(EventHubInfo eventHubInfo)
        {
            var status = default(bool);

            try
            {
                if (eventHubInfo == default(EventHubInfo))
                {
                    throw new ArgumentNullException(nameof(eventHubInfo));
                }

                var sensorReadings            = faker.Generate(eventHubInfo.NoOfMessages);
                var ehConnectionStringBuilder = new EventHubsConnectionStringBuilder(eventHubInfo.EventHubConnectionString)
                {
                    EntityPath = eventHubInfo.EventHubPath
                };

                var eventHubClient = EventHubClient.CreateFromConnectionString(ehConnectionStringBuilder.ToString());

                foreach (var reading in sensorReadings)
                {
                    var jsonString     = JsonConvert.SerializeObject(reading);
                    var eventDataBytes = Encoding.ASCII.GetBytes(jsonString);
                    var eventData      = new EventData(eventDataBytes);

                    await eventHubClient.SendAsync(eventData);

                    Console.Write(".");
                }

                status = true;
            }
            catch
            {
                status = false;
            }

            return(status);
        }