public async Task SendTask(int taskId)
        {
            await _locker.WaitAsync();

            try
            {
                int[,] task = await ReadStoredTask(taskId);

                byte[] matrixSize = ByteConverter.GetByteMatrixSize(task);
                byte[] matrix     = ByteConverter.GetBytes(task);
                byte[] buffer     = new byte[268435456];

                WorkerServerDto server = await WorkerRepository.GetServerByAssignedTaskId(taskId);

                matrixSize = matrixSize.AddPrefix(Bytes.byteDef["size_prefix"]);
                matrix     = matrix.AddPrefix(Bytes.byteDef["task_prefix"]);

                _connectionService.SendBytes(matrixSize, server.IpAddress, server.Port);
                _connectionService.ReceiveBytes(ref buffer, server.IpAddress, server.Port);

                _connectionService.SendBytes(matrix, server.IpAddress, server.Port);
                _connectionService.ReceiveBytes(ref buffer, server.IpAddress, server.Port);

                await TaskRepository.UpdateTaskStatus(taskId, "Working");
            }
            finally
            {
                _locker.Release();
            }
        }
Пример #2
0
        public static async Task <bool> AddNewWorkerServer(WorkerServerDto server)
        {
            using (var dbContext = new LoadManagerContext())
            {
                if (dbContext.WorkerServers.Count(b => b.IpAddress == server.IpAddress && b.Port == server.Port) != 0)
                {
                    return(true);
                }

                dbContext.WorkerServers.Add(new WorkerServer()
                {
                    IpAddress   = server.IpAddress,
                    IsConnected = server.IsConnected,
                    Port        = server.Port
                });
                return(await dbContext.SaveChangesAsync() == 1);
            }
        }