コード例 #1
0
ファイル: DockerService.cs プロジェクト: vblz/TankFight
        public async Task <ContainerOutput> ReadLineAsync(MultiplexedStream multiplexedStream, CancellationToken cancellationToken)
        {
            List <byte> receiverStdOut = new List <byte>();
            List <byte> receiverStdErr = new List <byte>();

            byte[] buffer = new byte[15];

            while (!cancellationToken.IsCancellationRequested)
            {
                var readResult =
                    await multiplexedStream.ReadOutputAsync(buffer, 0, buffer.Length, cancellationToken);

                if (readResult.Target == MultiplexedStream.TargetStream.StandardError)
                {
                    receiverStdErr.AddRange(buffer.Take(readResult.Count));
                }

                if (readResult.Target != MultiplexedStream.TargetStream.StandardOut)
                {
                    continue;
                }

                int newLineIndex = -1;

                for (int i = 0; i < readResult.Count; ++i)
                {
                    if (buffer[i] == NewLineChar)
                    {
                        newLineIndex = i;
                        break;
                    }
                }

                if (newLineIndex != -1)
                {
                    receiverStdOut.AddRange(buffer.Take(newLineIndex));
                    break;
                }

                receiverStdOut.AddRange(buffer.Take(readResult.Count));
            }

            var result = new ContainerOutput();

            try
            {
                result.StdErr = Encoding.ASCII.GetString(receiverStdErr.ToArray());
            }
            catch (Exception ex)
            {
                this.logger.LogWarning(ex, "Ошибка при чтении stderr");
            }

            result.StdOut = Encoding.ASCII.GetString(receiverStdOut.ToArray());

            return(result);
        }
コード例 #2
0
ファイル: Neural.cs プロジェクト: charlierix/AsteroidMiner
        /// <summary>
        /// This overload takes a map that tells which parts can link to which
        /// </summary>
        public static ContainerOutput[] LinkNeurons(BotConstruction_PartMap partMap, ContainerInput[] containers, double maxWeight)
        {
            //TODO: Take these as params (these are used when hooking up existing links)
            const int MAXINTERMEDIATELINKS = 3;
            const int MAXFINALLINKS = 3;

            NeuralLink[][] internalLinks, externalLinks;
            if (containers.Any(o => o.ExternalLinks != null || o.InternalLinks != null))
            {
                internalLinks = BuildInternalLinksExisting(containers, MAXINTERMEDIATELINKS, MAXFINALLINKS);
                externalLinks = BuildExternalLinksExisting(containers, MAXINTERMEDIATELINKS, MAXFINALLINKS);        //NOTE: The partMap isn't needed for existing links.  It is just to help figure out new random links

                internalLinks = CapWeights(internalLinks, maxWeight);
                externalLinks = CapWeights(externalLinks, maxWeight);
            }
            else
            {
                internalLinks = BuildInternalLinksRandom(containers, maxWeight);
                externalLinks = BuildExternalLinksRandom(partMap, containers, maxWeight);
            }

            // Build the return
            ContainerOutput[] retVal = new ContainerOutput[containers.Length];
            for (int cntr = 0; cntr < containers.Length; cntr++)
            {
                retVal[cntr] = new ContainerOutput(containers[cntr].Container, internalLinks[cntr], externalLinks[cntr]);
            }

            // Exit Function
            return retVal;
        }