Use C++Builder, connect to AWS API Gateway+(Node.js)Lambda with JSON[JAPAN]

Posted by on in Programming

Use C++Builder, connect to AWS API Gateway+Lambda with JSON.

Inside of AWS Lambda echoes the contents of post JSON.

 

/////
exports.handler = (event, context, callback) => {
    callback(null, event);
};

The function name is "test_function". And save it.

Make this Lambda"test_function" accessible from the Internet using Amazon API Gateway.

////
	TJSONArray*    __fastcall EchoStrings(TStrings* ss);

It seems of member function of DataSnap sample"EchoString()".


In TButton to make such Form, to call the EchoStrings(TStrings* ss).

////
TStringStream* __fastcall TForm1::str_stream_to_json(TStrings* ss)
{
	TStringStream* ms{nullptr};
	auto ja = new TJSONArray();
	int i{0};
	try
	{
		try
		{
			for (auto line_: ss)
			{
				ja->Add(new TJSONObject(new TJSONPair(
					Format("value_", ARRAYOFCONST((i)) ), line_) ));
				i++;
			}
		}
		catch(Exception& e1){}
		ms = new TStringStream(ja->ToJSON());
	}
	__finally
	{
		delete ja;
	}
	return ms;
}

TJSONArray* __fastcall TForm1::EchoStrings(TStrings* ss)
{
	std::unique_ptr<TNetHTTPClient> net_cliant_{new TNetHTTPClient(nullptr)};
	auto ms = str_stream_to_json(ss);
	_di_IHTTPResponse http_;
	net_cliant_->ContentType = "application/json";
	if (ms != nullptr)
	{
		try
		{
			http_ = net_cliant_->Post( "https://******/test-function?a=1",
				ms);
			std::unique_ptr<TStringStream> ms1 = std::make_unique<TStringStream>(static_cast<UnicodeString>(L""), TEncoding::UTF8, true);
			ms1->LoadFromStream(http_->ContentStream);
			ms1->Position = 0;

			return static_cast<TJSONArray*>((
				static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(ms1->DataString))
				)->GetValue("body-json"));
		}
		catch(Exception& e1)
		{
			return nullptr;
        }
	}
	else
        return nullptr;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	for (auto value_: EchoStrings(Memo1->Lines)) {
		Memo1->Lines->Append(
			static_cast<TJSONObject* >(value_)->GetValue("value_")->Value());
	}
}

Return contents written in Memo1 as TStringStream.

Reply in JSON like this.This is data returned by the Amazon API Gateway.

{
    "body-json": [
        {
            "value_": "English"
        }, 
        {
            "value_": "日本語"
        }, 
        {
            "value_": "русский"
        }, 
        {
            "value_": "한국"
        }
    ], 
    "context": {
        "user-arn": ""
    }, 
    "params": {
            "X-Forwarded-Proto": "https"
        }, 
    "stage-variables": {}
}

 



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

  • zs C30403
    zs C30403 Monday, 23 January 2017

    procedure TMainForm.TabSheetClose(Sender: TObject; var AllowClose: Boolean);
    var
    Ts : TUniTabSheet;
    Nd : TUniTreeNode;
    begin
    Ts := Sender as TUniTabSheet;
    Nd := Pointer(Ts.Tag);
    if Assigned(Nd) then
    begin
    Nd.Data := nil;
    if NavTree.Selected = Nd then
    NavTree.Selected := nil;
    end;
    end;

    procedure TMainForm.NavTreeClick(Sender: TObject);
    var
    Nd : TUniTreeNode;
    Ts : TUniTabSheet;
    FrC : TUniFrameClass;
    Fr : TUniFrame;
    FClassName, iconfile, Path: string;
    index: Integer;
    begin
    Path := UniServerModule.StartPath + 'units\';
    Nd := NavTree.Selected;
    if Nd.Count = 0 then
    begin
    Ts := Nd.Data;
    if not Assigned(Ts) then
    begin
    Ts := TUniTabSheet.Create(Self);
    Ts.PageControl := UniPageControl1;

    Ts.Closable := True;
    Ts.OnClose := TabSheetClose;
    Ts.Tag := NativeInt(Nd);
    Ts.Caption := Nd.Text;
    Ts.ImageIndex := Nd.ImageIndex;

    FClassName := 'TUni' + FileNames.Values[Nd.Text];

    FrC := TUniFrameClass(FindClass(FClassName));

    Fr := FrC.Create(Self);
    Fr.Align := alClient;
    Fr.Parent := Ts;

    Nd.Data := Ts;
    end;
    UniPageControl1.ActivePage := Ts;
    end;
    end;
    Convert To C++Builder ,thanks

  • zs C30403
    zs C30403 Monday, 23 January 2017

    procedure TMainForm.TabSheetClose(Sender: TObject; var AllowClose: Boolean);
    var
    Ts : TUniTabSheet;
    Nd : TUniTreeNode;
    begin
    Ts := Sender as TUniTabSheet;
    Nd := Pointer(Ts.Tag);
    if Assigned(Nd) then
    begin
    Nd.Data := nil;
    if NavTree.Selected = Nd then
    NavTree.Selected := nil;
    end;
    end;

    procedure TMainForm.NavTreeClick(Sender: TObject);
    var
    Nd : TUniTreeNode;
    Ts : TUniTabSheet;
    FrC : TUniFrameClass;
    Fr : TUniFrame;
    FClassName, iconfile, Path: string;
    index: Integer;
    begin
    Path := UniServerModule.StartPath + 'units\';
    Nd := NavTree.Selected;
    if Nd.Count = 0 then
    begin
    Ts := Nd.Data;
    if not Assigned(Ts) then
    begin
    Ts := TUniTabSheet.Create(Self);
    Ts.PageControl := UniPageControl1;

    Ts.Closable := True;
    Ts.OnClose := TabSheetClose;
    Ts.Tag := NativeInt(Nd);
    Ts.Caption := Nd.Text;
    Ts.ImageIndex := Nd.ImageIndex;

    FClassName := 'TUni' + FileNames.Values[Nd.Text];

    FrC := TUniFrameClass(FindClass(FClassName));

    Fr := FrC.Create(Self);
    Fr.Align := alClient;
    Fr.Parent := Ts;

    Nd.Data := Ts;
    end;
    UniPageControl1.ActivePage := Ts;
    end;
    end;
    Convert To C++Builder ,thanks

  • zs C30403
    zs C30403 Monday, 23 January 2017

    Main.cpp(41): parsing: void _fastcall TMainForm::UniFormCreate(TObject *)
    [bcc32 Error] Main.cpp(218): E2034 Cannot convert 'TComponent *' to 'int'
    Full parser context
    Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
    [bcc32 Error] Main.cpp(219): E2451 Undefined symbol 'nullptr'
    Full parser context
    Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
    [bcc32 Error] Main.cpp(221): E2451 Undefined symbol 'FCurrentFrame'
    Full parser context
    Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
    [bcc32 Error] Main.cpp(221): E2034 Cannot convert 'TMainForm * const' to 'TMetaClass *'
    Full parser context
    Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
    [bcc32 Error] Main.cpp(224): E2451 Undefined symbol 'FCurrentFrame'
    Full parser context
    Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
    [bcc32 Error] Main.cpp(224): E2031 Cannot cast from 'int' to 'TMetaClass * *'
    Full parser context


    Main.cpp(218,46): error E2034: E2034 Cannot convert 'TComponent *' to 'int'
    Main.cpp(219,19): error E2451: E2451 Undefined symbol 'nullptr'
    Main.cpp(221,15): error E2451: E2451 Undefined symbol 'FCurrentFrame'
    Main.cpp(221,39): error E2034: E2034 Cannot convert 'TMainForm * const' to 'TMetaClass *'
    Main.cpp(224,15): error E2451: E2451 Undefined symbol 'FCurrentFrame'
    Main.cpp(224,49): error E2031: E2031 Cannot cast from 'int' to 'TMetaClass * *'

  • h.mohri
    h.mohri Wednesday, 25 January 2017

    I tried it on bcc64

  • zs C30403
    zs C30403 Sunday, 22 January 2017

    procedure TfrmMain.OpenForm(Caption,FormClassName:string);
    var
    i:integer;
    sheet:TUniTabSheet;
    begin
    for i := 0 to pgeMain.PageCount-1 do
    begin
    if pgeMain.Pages[i].Caption=Caption then
    begin
    pgeMain.ActivePageIndex:=i;
    exit;
    end;
    end;


    sheet:=TUniTabSheet.Create(Self);
    sheet.Closable:=True;
    sheet.Caption:=Caption;
    sheet.PageIndex:=i+1;
    sheet.PageControl:=pgeMain;


    FCurrentFrame:=TUniFrameClass(FindClass(FormClassName)).Create(Self);


    FCurrentFrame.Align:=alClient;
    FCurrentFrame.Parent:=sheet;
    pgeMain.ActivePage:=sheet;
    end;
    Convert To C++Builder ,thanks

  • h.mohri
    h.mohri Sunday, 22 January 2017

    struct TUniTabSheet :TTabSheet
    {
    bool bClosable{false};
    __fastcall TUniTabSheet(TComponent* Owner): TTabSheet(Owner){}
    __property bool Closable = {read=bClosable, write=bClosable};

    };
    struct TUniFrameClass: TFrame
    {
    __fastcall TUniFrameClass(TComponent* Owner): TFrame(Owner){}
    };
    TUniFrameClass* FCurrentFrame{nullptr};
    void __fastcall TForm1::OpenForm(String Caption_, String FormClassName)
    {
    TPageControl* pgeMain{new TPageControl(this)};
    for (int i = 0; i PageCount; i++)
    {
    if (SameStr(pgeMain->Pages[i]->Caption,Caption_))
    pgeMain->ActivePageIndex = i;
    }
    TUniTabSheet* sheet{new TUniTabSheet(this)};
    sheet->Closable = true;
    sheet->Caption = Caption_;
    sheet->PageIndex = pgeMain->ActivePageIndex+1;
    sheet->PageControl = pgeMain;
    auto temp = this->FindComponent(FormClassName);
    if (temp == nullptr)
    {
    FCurrentFrame = new TUniFrameClass(this);
    }
    else
    FCurrentFrame = static_cast<TUniFrameClass*>(temp);
    FCurrentFrame->Align = alClient;
    FCurrentFrame->Parent = sheet;
    pgeMain->ActivePage = sheet;

    }

  • Please login first in order for you to submit comments
  • Page :
  • 1

Check out more tips and tricks in this development video: