using System;
using Google.ProtocolBuffers.Descriptors;
namespace Google.ProtocolBuffers {
///
/// Interface for an RPC channel. A channel represents a communication line to
/// a service (IService implementation) which can be used to call that service's
/// methods. The service may be running on another machine. Normally, you should
/// not call an IRpcChannel directly, but instead construct a stub wrapping it.
/// Generated service classes contain a CreateStub method for precisely this purpose.
///
public interface IRpcChannel {
///
/// Calls the given method of the remote service. This method is similar
/// to with one important difference: the
/// caller decides the types of the IMessage objects, not the implementation.
/// The request may be of any type as long as request.Descriptor == method.InputType.
/// The response passed to the callback will be of the same type as
/// (which must be such that
/// responsePrototype.Descriptor == method.OutputType).
///
void CallMethod(MethodDescriptor method, IRpcController controller,
IMessage request, IMessage responsePrototype, Action done);
}
}