BayGUI Web Toolkit?
IRCでうっちゃんと話していたときに出たネタ。Google Web Toolkit に対抗して、BayGUI とソース互換で CGI が作れたら面白いね、とひらめいた。ちなみに Google Web Toolkit を使うと
package jp.tuyano.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; public class MyGwt implements EntryPoint { public void onModuleLoad() { final Button button = new Button("Click me"); final Label label = new Label(); button.addClickListener(new ClickListener() { public void onClick(Widget sender) { if (label.getText().equals("")) label.setText("Hello World!"); else label.setText(""); } }); RootPanel.get("slot1").add(button); RootPanel.get("slot2").add(label); } }
こんな感じで、Web アプリを作れます。なんか BayGUI のソースにそっくりですよね(笑)。Ajax + C++ で Web アプリなんて、Web2.0 と Binary2.0 の交点にいるみたいで、わくわくします!!イベント周りをどう Ajax で実現するかが肝になるでしょうね。
とりあえず CGI には全く見えない CGI を C++ で作ってみました(笑)。
#include <stdio.h> #include <stdlib.h> class Graphics { public: void drawString(char* text, int x, int y) { printf("%s", text); } }; class Frame { private: char* title; Graphics* g; public: Frame(char* title) { this->title = title; this->g = new Graphics(); } void paint(Graphics* g) { g->drawString("hogehoge", 0, 0); } void repaint() { printf("Content-Type: text/html;\n\n"); printf("<html><title>%s</title><body>", title); paint(g); printf("</body></html>\n"); } }; int main(void) { Frame* app = new Frame("Hello,World"); app->repaint(); return 0; }
コンパイルして実行します。上手く実行できたら、ブラウザからアクセスしてみましょう。
g++ -Wall -o index.cgi main.cpp && ./index.cgi