Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site











SourceForge.net Logo

WebWord

 

Package demonstrating TURTLE (thin JavaScript client to U++ based GUI server application)

Description

The reference shows usage of TURTLE. TURTLE is a thin JavaScript client to U++ based GUI server application. The page is by default available on following address: 127.0.0.1:8088. Of course firstly you need to compile the project and execute it.

WebWord can be launch in any browser that supports HTML5 and implements WebSocket protocol. The simplest examples of such browser are the latest versions of Firefox or Chrom.

Result

 

 

 

WebWord.h

 

#ifndef _WebWord_WebWord_h_

#define _WebWord_WebWord_h_

 

#include <RichEdit/RichEdit.h>

#include <PdfDraw/PdfDraw.h>

 

using namespace Upp;

 

struct WebWord : public TopWindow {

public:

    RichEditWithToolBar   editor;

    StatusBar  statusbar;

    

    void ShowInfo();

 

public:

    typedef WebWord CLASSNAME;

 

    WebWord();

};

 

#endif

 

 

 

WebWord.cpp

 

#include "WebWord.h"

 

String FormatSize(int64 n)

{

    if(n < 10000)

        return Format("%d B", n);

    else

    if(n < 10000 * 1024)

        return Format("%d.%d KB", n >> 10, (n & 1023) / 103);

    else

    if(n < I64(10000000) * 1024)

        return Format("%d.%d MB", n >> 20, (n & 1023) / 103);

    else

        return Format("%d.%d GB", n >> 30, (n & 1023) / 103);

}

 

 

void WebWord::ShowInfo()

{

    String s;

    s << "Mem " << MemoryUsedKb() << " KB";

    static int sent_prev;

#ifdef PLATFORM_TURTLE

    int secs = GetSysTime() - Ctrl::stat_started;

    Time tm = Time(1, 1, 1, 0, 0, 0) + secs;

    s << ", uptime " << Format("%d:%0d:%02d:%02d", tm - Date(1, 1, 1), tm.hour, tm.minute, tm.second);

    s << ", data sent " << FormatSize(Ctrl::stat_data_send);

    if(secs)

        s << ", average bandwidth " << FormatSize(Ctrl::stat_data_send / secs) << "/s";

    s << ", actual bandwidth " << FormatSize(Ctrl::stat_data_send - sent_prev);

    s << ", putimage " << Ctrl::stat_putimage;

    s << ", putrect " << Ctrl::stat_putrect;

    s << ", setimage " << Ctrl::stat_setimage << " len " << FormatSize(Ctrl::stat_setimage_len);

    s << ", roundtrip " << Ctrl::stat_roundtrip_ms << " ms";

    s << ", client " << Ctrl::stat_client_ms << " ms";

#ifdef PLATFORM_POSIX

    s << ", cpu time " << int((double) clock() / CLOCKS_PER_SEC * 1000) << " ms";

#endif

    sent_prev = Ctrl::stat_data_send;

    statusbar.Set(s);

#endif

}

 

WebWord::WebWord()

{

    AddFrame(statusbar);

    Add(editor.SizePos());

    Sizeable().Zoomable();

//    FrameLess();

    Maximize();

    Title("WebWord");

    Icon(CtrlImg::File());

    editor.ClearModify();

    ActiveFocus(editor);

    SetTimeCallback(-1000, THISBACK(ShowInfo));

}

 

void Main()

{

    WebWord w;

    w.Run();

}

 

#ifdef flagTURTLE

CONSOLE_APP_MAIN

{

    StdLogSetup(LOG_COUT|LOG_FILE);

    

    MemoryLimitKb(100000000); // Perhaps a good idea to set a limit to prevent DDoS

    Ctrl::connection_limit = 50; // Maximum number of concurrent users (preventing DDoS)

 

#ifdef _DEBUG

    Ctrl::debugmode = true; // Only single session in debug (no forking)

#endif

 

//    Ctrl::WhenDisconnect = callback(FinishApp); // Use this to gracefully exit (save data?)

 

#ifndef _DEBUG

    Ctrl::host = "myserverhost.org";

#endif

 

    if(Ctrl::StartSession()) {

        Main();

        Ctrl::EndSession();

    }

 

    LOG("Session Finished");

}

#else

GUI_APP_MAIN

{

    Main();

}

#endif

 

 

 

 

Do you want to contribute?