Glad to know if worked. Thanks :)

-Sree

On Tue, Jan 24, 2017 at 10:07 PM, <[email protected]> wrote:

> Thank you Sree! It is working now. I really appreciate your help. You guys
> are awesome!
>
> Sree Kuchibhotla於 2017年1月24日星期二 UTC-8下午9時07分51秒寫道:
>
>> Hi,
>> You are incorrectly using the async streaming API on the server side.
>>
>> In the following code, stream_.Read(),  stream_.Write() and stream_.Finish()
>> are three *Async* calls -and would return immediately. You should have
>> done a cq_.Next() after each call to make sure the async operations
>> actually completed.
>>
>> ---
>>        std::string prefix("Hello ");
>>         stream_.Read(&request_, this);
>>
>>        //*** SREE: You should wait for cq_.Next() to return the tag (i.e
>> 'this') before proceeding ***
>>       // It is not safe to proceed without that
>>
>>         std::cout << "Greeter server received: " << request_.message() <<
>> std::endl;
>>         reply_.set_message(prefix + request_.message());
>>         std::cout << "Greeter server replied: " << reply_.message() <<
>> std::endl;
>>         stream_.Write(reply_, this);
>>
>>        //*** SREE: You should wait for cq_.Next() to return the tag (i.e
>> 'this') before proceeding ***
>>
>>         // And we are done! Let the gRPC runtime know we've finished,
>> using the
>>         // memory address of this instance as the uniquely identifying
>> tag for
>>         // the event.
>>         status_ = FINISH;
>>         stream_.Finish(Status::OK, this);
>> ---
>>
>> The correct way to do it is:
>>
>> 1) Expand your state-machine in CallData.  i.e change  enum CallStatus {
>> CREATE, PROCESS, FINISH };
>> to enum CallStatus { CREATE, PROCESS, READ_CALLED, WRITE_CALLED, FINISH
>> };
>>
>> 2) Change your Proceed() function to something like below:
>>
>> void Proceed() {
>>    switch(status_) {
>>      case CREATE: {
>>         service_->RequestSayHello(&ctx_, &stream_, cq_, cq_, this);
>>         status_ = PROCESS;
>>         break;
>>       }
>>      case PROCESS: {
>>         new CallData(service_, cq_);
>>
>>         std::string prefix("Hello ");
>>         stream_.Read(&request_, this);
>>         status_ = READ_CALLED;
>>         break;
>>       }
>>       case READ_CALLED: {
>>         std::cout << "Greeter server received: " << request_.message() <<
>> std::endl;
>>         reply_.set_message(prefix + request_.message());
>>         std::cout << "Greeter server replied: " << reply_.message() <<
>> std::endl;
>>         stream_.Write(reply_, this);
>>
>>         status_ = WRITE_CALLED;
>>         break;
>>       }
>>       case WRITE_CALLED: {
>>         stream_.Finish(Status::OK, this);
>>         status_ = FINISH;
>>         break;
>>       }
>>       case FINISH: {
>>         delete this;
>>       }
>>     }
>>
>>
>> Hope this helps,
>>
>> thanks,
>> Sree
>>
>> --
> You received this message because you are subscribed to the Google Groups "
> grpc.io" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/grpc-io.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/grpc-io/b1582036-1946-4707-8ef3-b49688e2cd18%40googlegroups.com
> <https://groups.google.com/d/msgid/grpc-io/b1582036-1946-4707-8ef3-b49688e2cd18%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CALRi9QcXTar-7wwCF8uig-RN0W1nc84VE-TcTiZNzs5yAFSsTA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to