indent_impl(s_service_impl) << "TProtocolUtil.Skip(iprot, TType.Struct);" << endl;
indent_impl(s_service_impl) << "iprot.ReadMessageEnd();" << endl;
indent_impl(s_service_impl) << "x := TApplicationException.Create(TApplicationException.TExceptionType.UnknownMethod, 'Invalid method name: ''' + msg.Name + '''');" << endl;
- indent_impl(s_service_impl) << "oprot.WriteMessageBegin(TMessageImpl.Create(msg.Name, TMessageType.Exception, msg.SeqID));" << endl;
+ indent_impl(s_service_impl) << "msg := TMessageImpl.Create(msg.Name, TMessageType.Exception, msg.SeqID);" << endl;
+ indent_impl(s_service_impl) << "oprot.WriteMessageBegin( msg);" << endl;
indent_impl(s_service_impl) << "x.Write(oprot);" << endl;
indent_impl(s_service_impl) << "oprot.WriteMessageEnd();" << endl;
indent_impl(s_service_impl) << "oprot.Transport.Flush();" << endl;
indent_up_impl();
indent_impl(s_service_impl) << "args: " << args_intfnm << ";" << endl;
if (!tfunction->is_oneway()) {
+ indent_impl(s_service_impl) << "msg: IMessage;" << endl;
indent_impl(s_service_impl) << "ret: " << result_intfnm << ";" << endl;
}
}
if (! tfunction->is_oneway()) {
- indent_impl(s_service_impl) << "oprot.WriteMessageBegin( TMessageImpl.Create('" << tfunction->get_name() << "', TMessageType.Reply, seqid)); " << endl;
+ indent_impl(s_service_impl) << "msg := TMessageImpl.Create('" << tfunction->get_name() << "', TMessageType.Reply, seqid); " << endl;
+ indent_impl(s_service_impl) << "oprot.WriteMessageBegin( msg); " << endl;
indent_impl(s_service_impl) << "ret.Write(oprot);" << endl;
indent_impl(s_service_impl) << "oprot.WriteMessageEnd();" << endl;
indent_impl(s_service_impl) << "oprot.Transport.Flush();" << endl;
// This base context does nothing.
TJSONBaseContext = class
protected
- FProto : IJSONProtocol;
+ FProto : Pointer; // weak IJSONProtocol;
public
constructor Create( const aProto : IJSONProtocol);
procedure Write; virtual;
// Holds up to one byte from the transport
TLookaheadReader = class
protected
- FProto : IJSONProtocol;
+ FProto : Pointer; // weak IJSONProtocol;
constructor Create( const aProto : IJSONProtocol);
private
constructor TJSONProtocolImpl.TJSONBaseContext.Create( const aProto : IJSONProtocol);
begin
inherited Create;
- FProto := aProto;
+ FProto := Pointer(aProto);
end;
begin
if FFirst
then FFirst := FALSE
- else FProto.Transport.Write( COMMA);
+ else IJSONProtocol(FProto).Transport.Write( COMMA);
end;
begin
if FFirst
then FFirst := FALSE
- else FProto.ReadJSONSyntaxChar( COMMA[0]);
+ else IJSONProtocol(FProto).ReadJSONSyntaxChar( COMMA[0]);
end;
end
else begin
if FColon
- then FProto.Transport.Write( COLON)
- else FProto.Transport.Write( COMMA);
+ then IJSONProtocol(FProto).Transport.Write( COLON)
+ else IJSONProtocol(FProto).Transport.Write( COMMA);
FColon := not FColon;
end;
end;
end
else begin
if FColon
- then FProto.ReadJSONSyntaxChar( COLON[0])
- else FProto.ReadJSONSyntaxChar( COMMA[0]);
+ then IJSONProtocol(FProto).ReadJSONSyntaxChar( COLON[0])
+ else IJSONProtocol(FProto).ReadJSONSyntaxChar( COMMA[0]);
FColon := not FColon;
end;
end;
constructor TJSONProtocolImpl.TLookaheadReader.Create( const aProto : IJSONProtocol);
begin
inherited Create;
- FProto := aProto;
+ FProto := Pointer(aProto);
FHasData := FALSE;
end;
then FHasData := FALSE
else begin
SetLength( FData, 1);
- FProto.Transport.ReadAll( FData, 0, 1);
+ IJSONProtocol(FProto).Transport.ReadAll( FData, 0, 1);
end;
result := FData[0];
end;
begin
if not FHasData then begin
SetLength( FData, 1);
- FProto.Transport.ReadAll( FData, 0, 1);
+ IJSONProtocol(FProto).Transport.ReadAll( FData, 0, 1);
FHasData := TRUE;
end;
result := FData[0];