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.
