public override async Task GetPowerRequests(PowerRequestsOptions request, global::Grpc.Core.IServerStreamWriter <Power> responseStream, global::Grpc.Core.ServerCallContext context)
 {
     while (true)
     {
         bool enabled;
         if (powerQueue.TryTake(out enabled, 1000))
         {
             await responseStream.WriteAsync(new Power { Enabled = enabled });
         }
         if (Stop)
         {
             break;
         }
     }
 }
Exemplo n.º 2
0
 public abstract global::System.Threading.Tasks.Task shouldBeStreaming(Grpc.Core.IAsyncStreamReader <global::Bond.Grpc.IMessage <stream> > requests, Grpc.Core.IAsyncStreamWriter <global::Bond.Grpc.IMessage <stream> > responses, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 3
0
 internal global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <global::Bond.Void> > foo15_impl(global::Bond.Grpc.IMessage <global::tests2.OtherBasicTypes> request, global::Grpc.Core.ServerCallContext context)
 {
     return(global::Bond.Grpc.Internal.NothingCallHandler.Handle(foo15, request, context));
 }
Exemplo n.º 4
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <BasicTypes> > cq(global::Bond.Grpc.IMessage <global::Bond.Void> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 5
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <GetExperimentResponse> > GetExperiment(global::Bond.Grpc.IMessage <GetEntityRequest> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 6
0
 internal global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <global::Bond.Void> > foo14_impl(global::Bond.Grpc.IMessage <dummy> request, global::Grpc.Core.ServerCallContext context)
 {
     return(global::Bond.Grpc.Internal.NothingCallHandler.Handle(foo14, request, context));
 }
Exemplo n.º 7
0
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="requestStream">请求流</param>
        /// <param name="responseStream">响应流</param>
        /// <param name="context">站点上下文</param>
        /// <returns></returns>
        public override async Task FileUpload(global::Grpc.Core.IAsyncStreamReader <FileReply> requestStream, global::Grpc.Core.IServerStreamWriter <FileReturn> responseStream, global::Grpc.Core.ServerCallContext context)
        {
            List <string>    lstFilesName = new List <string>();    //文件名
            List <FileReply> lstContents  = new List <FileReply>(); //数据集合

            FileStream fs        = null;
            DateTime   startTime = DateTime.Now;//开始时间
            string     mark      = string.Empty;
            string     savePath  = string.Empty;

            try
            {
                //reply.Block数字的含义是服务器和客户端约定的
                while (await requestStream.MoveNext())//读取数据
                {
                    var reply = requestStream.Current;
                    mark = reply.Mark;
                    if (reply.Block == -2)//传输完成
                    {
                        Console.WriteLine($"{mark},完成上传文件。共计【{lstFilesName.Count}】个,耗时:{DateTime.Now - startTime}");
                        break;
                    }
                    else if (reply.Block == -1)                                       //取消了传输
                    {
                        Console.WriteLine($"文件【{reply.FileName}】取消传输!");              //写入日志
                        lstContents.Clear();
                        fs?.Close();                                                  //释放文件流
                        if (!string.IsNullOrEmpty(savePath) && File.Exists(savePath)) //如果传输不成功,删除该文件
                        {
                            File.Delete(savePath);
                        }
                        savePath = string.Empty;
                        break;
                    }
                    else if (reply.Block == 0) //文件传输完成
                    {
                        if (lstContents.Any()) //如果还有数据,就写入文件
                        {
                            lstContents.OrderBy(c => c.Block).ToList().ForEach(c => c.Content.WriteTo(fs));
                            lstContents.Clear();
                        }
                        lstFilesName.Add(savePath); //传输成功的文件
                        fs?.Close();                //释放文件流
                        savePath = string.Empty;

                        //告知客户端,已经完成传输
                        await responseStream.WriteAsync(new FileReturn
                        {
                            FileName = reply.FileName,
                            Mark     = mark
                        });
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(savePath))          //有新文件来了
                        {
                            savePath = Path.GetFullPath(".//Files"); //文件路径
                            if (!Directory.Exists(savePath))
                            {
                                Directory.CreateDirectory(savePath);
                            }

                            savePath = Path.Combine(savePath, reply.FileName);

                            fs = new FileStream(savePath, FileMode.Create, FileAccess.ReadWrite);
                            Console.WriteLine($"{mark},上传文件:{savePath},{DateTime.UtcNow:HH:mm:ss:ffff}");
                        }
                        lstContents.Add(reply);        //加入链表
                        if (lstContents.Count() >= 20) //每个包1M,20M为一个集合,一起写入数据。
                        {
                            lstContents.OrderBy(c => c.Block).ToList().ForEach(c => c.Content.WriteTo(fs));
                            lstContents.Clear();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{mark},发生异常({ex.GetType()}):{ex.Message}");
            }
            finally
            {
                fs?.DisposeAsync();
            }
        }
Exemplo n.º 8
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <global::Bond.Void> > MethodTemplate(global::Bond.Grpc.IMessage <global::Bond.Void> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 9
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <PermissionCheckResponse> > HasPermission(global::Bond.Grpc.IMessage <PermissionCheckRequest> request, global::Grpc.Core.ServerCallContext context);
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <SampleResponse> > GetValue(global::Bond.Grpc.IMessage <SampleRequest> request, global::Grpc.Core.ServerCallContext context);
        public override async Task <Empty> SetPowerActuals(global::Grpc.Core.IAsyncStreamReader <Power> requestStream, global::Grpc.Core.ServerCallContext context)
        {
            while (await requestStream.MoveNext())
            {
                var msg = requestStream.Current;
                cst.Power.Actual = msg.Enabled;
            }

            return(new Empty());
        }
 public override Task <Empty> SetLocActuals(global::Grpc.Core.IAsyncStreamReader <Loc> requestStream, global::Grpc.Core.ServerCallContext context)
 {
     return(base.SetLocActuals(requestStream, context));
 }
 public override async Task <Empty> Ping(LocalWorkerInfo request, global::Grpc.Core.ServerCallContext context)
 {
     Log.Info("Ping from " + request.Id);
     return(new Empty());
 }
Exemplo n.º 14
0
        public override async Task <CouponModel> GetDiscount(GetDiscountRequest request, global::Grpc.Core.ServerCallContext context)
        {
            var coupon = await _repository.GetDiscount(request.ProductName);

            if (coupon == null)
            {
                throw new RpcException(new Status(StatusCode.NotFound, $"Discunt for product {request.ProductName} was not found"));
            }

            _logger.LogInformation(
                "Discount is retrieved for ProductName : {productName}, Amount : {amount}", coupon.ProductName, coupon.Amount);

            var couponModel = _mapper.Map <CouponModel>(coupon);

            return(couponModel);
        }
Exemplo n.º 15
0
        /// <summary>
        /// 文件下载
        /// </summary>
        /// <param name="request">下载请求</param>
        /// <param name="responseStream">文件写入流</param>
        /// <param name="context">站点上下文</param>
        /// <returns></returns>
        public override async Task FileDownload(FileRequest request, global::Grpc.Core.IServerStreamWriter <FileReply> responseStream, global::Grpc.Core.ServerCallContext context)
        {
            List <string> lstSuccFiles = new List <string>(); //传输成功的文件
            DateTime      startTime    = DateTime.Now;        //传输文件的起始时间
            int           chunkSize    = 1024 * 1024;         //每次读取的数据
            var           buffer       = new byte[chunkSize]; //数据缓冲区
            FileStream    fs           = null;                //文件流

            try
            {
                //reply.Block数字的含义是服务器和客户端约定的
                for (int i = 0; i < request.FileNames.Count; i++)
                {
                    string    fileName = request.FileNames[i];                      //文件名
                    string    filePath = Path.GetFullPath($".//Files\\{fileName}"); //文件路径
                    FileReply reply    = new FileReply
                    {
                        FileName = fileName,
                        Mark     = request.Mark
                    };                                                    //应答数据
                    Console.WriteLine($"{request.Mark},下载文件:{filePath}"); //写入日志,下载文件
                    if (File.Exists(filePath))
                    {
                        fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, chunkSize, useAsync: true);

                        //fs.Length  可以告诉客户端所传文件大小
                        int readTimes = 0;//读取次数
                        while (true)
                        {
                            int readSise = fs.Read(buffer, 0, buffer.Length); //读取数据
                            if (readSise > 0)                                 //读取到了数据,有数据需要发送
                            {
                                reply.Block   = ++readTimes;
                                reply.Content = Google.Protobuf.ByteString.CopyFrom(buffer, 0, readSise);
                                await responseStream.WriteAsync(reply);
                            }
                            else//没有数据了,就告诉对方,读取完了
                            {
                                reply.Block   = 0;
                                reply.Content = Google.Protobuf.ByteString.Empty;
                                await responseStream.WriteAsync(reply);

                                lstSuccFiles.Add(fileName);
                                Console.WriteLine($"{request.Mark},完成发送文件:{filePath}"); //日志,记录发送成功
                                break;                                                  //跳出去
                            }
                        }
                        fs?.Close();
                    }
                    else
                    {
                        Console.WriteLine($"文件【{filePath}】不存在。"); //写入日志,文件不存在
                        reply.Block = -1;                         //-1的标记为文件不存在
                        await responseStream.WriteAsync(reply);   //告诉客户端,文件状态
                    }
                }
                //告诉客户端,文件传输完成
                await responseStream.WriteAsync(new FileReply
                {
                    FileName = string.Empty,
                    Block    = -2,//告诉客户端,文件已经传输完成
                    Content  = Google.Protobuf.ByteString.Empty,
                    Mark     = request.Mark
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{request.Mark},发生异常({ex.GetType()}):{ex.Message}");
            }
            finally
            {
                fs?.DisposeAsync();
            }
            Console.WriteLine($"{request.Mark},文件传输完成。共计【{lstSuccFiles.Count / request.FileNames.Count}】,耗时:{DateTime.Now - startTime}");
        }
Exemplo n.º 16
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <Payload> > foo32(global::Bond.Grpc.IMessage <global::Bond.Void> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 17
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <EchoMessage> > Echo(global::Bond.Grpc.IMessage <EchoMessage> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 18
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <AddOrUpdateEntityResponse> > AddModule(global::Bond.Grpc.IMessage <Module> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 19
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <global::Bond.Void> > ConsumesGeneric2(global::Bond.Grpc.IMessage <SomeBox <List <int> > > request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 20
0
 public abstract global::System.Threading.Tasks.Task foo12_impl(global::Bond.Grpc.IMessage <global::Bond.Void> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 21
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <global::Bond.Void> > foo33(Grpc.Core.IAsyncStreamReader <global::Bond.Grpc.IMessage <BasicTypes> > requests, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 22
0
 public abstract global::System.Threading.Tasks.Task foo15(global::Bond.Grpc.IMessage <global::tests2.OtherBasicTypes> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 23
0
 public abstract global::System.Threading.Tasks.Task foo35(Grpc.Core.IAsyncStreamReader <global::Bond.Grpc.IMessage <BasicTypes> > requests, Grpc.Core.IAsyncStreamWriter <global::Bond.Grpc.IMessage <BasicTypes> > responses, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 24
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <dummy> > foo44(global::Bond.Grpc.IMessage <dummy> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 25
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <stream> > shouldBeUnary(global::Bond.Grpc.IMessage <stream> request, global::Grpc.Core.ServerCallContext context);
Exemplo n.º 26
0
 public abstract global::System.Threading.Tasks.Task <global::Bond.Grpc.IMessage <Result> > foo(global::Bond.Grpc.IMessage <Param> request, global::Grpc.Core.ServerCallContext context);
 public override Task GetLocRequests(LocRequestsOptions request, global::Grpc.Core.IServerStreamWriter <Loc> responseStream, global::Grpc.Core.ServerCallContext context)
 {
     return(base.GetLocRequests(request, responseStream, context));
 }