Example #1
0
        public static void Notify(Task serverTask)
        {
            ControllerServer controller = ControllerServer.Instance;

            EventWaitHandle[] waiters = new EventWaitHandle[2];

            waiters[0] = ServerState.GeneratorsUpdated;
            waiters[1] = ServerState.TasksUpdated;

            while (!serverTask.IsCompleted)
            {
                int operation = WaitHandle.WaitAny(waiters);

                if (operation == 0)
                {
                    List <GenData> generators = new List <GenData>();

                    foreach (var generator in ServerState.Generators)
                    {
                        generators.Add(new GenData
                        {
                            Users       = generator.VirtualUsers,
                            ActiveUsers = generator.CurrentUsers
                        });
                    }

                    controller.BroadcastToClients(PacketBuilder.Build(new ActiveGenerators()
                    {
                        Generators = generators
                    }));
                }
                else if (operation == 1)
                {
                    List <TaskInfo> tasks = new List <TaskInfo>();

                    foreach (var task in ServerState.Tasks)
                    {
                        if (task.State == TaskState.RUNNING || task.State == TaskState.CREATED)
                        {
                            tasks.Add(new TaskInfo()
                            {
                                GroupNumber = task.TaskGroup,
                                Owner       = task.Owner,
                                Loading     = (byte)(((double)task.VirtualUsers / ServerState.InfCapacity) * 100)
                            });
                        }
                    }

                    controller.BroadcastToClients(PacketBuilder.Build(new ActiveTasks()
                    {
                        Tasks = tasks
                    }));
                }
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Press any key to stop the server.");

            ControllerServer        controller = ControllerServer.Instance;
            CancellationTokenSource token      = new CancellationTokenSource();
            Server server     = new Server(Config.Host, Config.Port, controller, controller);
            Task   serverTask = Task.Run(() => server.Run(token));

            Task.Run(() => ClientUpdateNotifier.Notify(serverTask));
            Task.Run(() => TaskDispatcher.Dispatch(serverTask));
            Console.ReadKey();
            token.Cancel();
            Console.WriteLine("Stopping server...");
            serverTask.Wait();
            Console.WriteLine("Done!");
        }