-
Notifications
You must be signed in to change notification settings - Fork 1
JSVAR - a C library for web GUIs with websockets.
License
Marian-Vittek/jsvar
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
JsVar is a C library for Linux/Unix systems allowing easy creation of
web GUIs with websockets.
JsVar provides compact and lightweight web and websocket servers. When
a browser connects to JsVar a websocket connection is open and can be
used for bidirectional communication between C code running on the
server side and Javascript code running on the client (browser) side.
Data are transmitted to javascript immediately after having been sent
(PUSH method).
JsVar can be used to provide both plain (unencrypted) and SSL
connectivity. It operates on both 'char*' and 'wchar_t*' strings. It
allows to send both binary and text websocket messages. It is written
in a common subsets of C and C++ languages and compiles with both C
and C++ compilers.
JsVar can be useful in education, embedded systems and anywhere where
a web GUI is an appropriate option, especially if server is streaming
live data. JsVar is a single-thread application. It is perfectly
suited for embedded systems and professional use. Originally, it was
developed for a brokerage server streaming prices, I've extracted it
from the production version of that software. In order to use jsVar
one has to be familiar with HTML and Javascript programming language.
Creation of basic web GUIs is pretty simple, here is a full example
from our sample set.
//////////////////////////////////////////////////////////////////////
//
// This program demonstrates howto dynamically update web page from C
// using the function 'jsVarEvalAll'. This function executes a
// javascript code on all connected clients.
//
// The program launches a secure webserver listening on port 4321 and
// dynamically updates current (server) time on all connected
// browsers.
//
// URL: https://localhost:4321
//
#include <time.h>
#include "jsvar.h"
int main() {
time_t lastSentTime;
// Create new web/websocket server showing the following html page
// on each request. Note that "active" pages include the script
// "/jsvarmainjavascript.js"!
jsVarNewSinglePageServer(
4321, BAIO_SSL_YES, 0,
"<html><body><script src='/jsvarmainjavascript.js'></script>"
"Server Time: <span id=mainSpan>nothing here for now</span>"
"</body></html>"
);
lastSentTime = 0;
// The main loop
for(;;) {
if (lastSentTime != time(NULL)) {
// Time changed.
lastSentTime = time(NULL);
// Send eval request to all connected clients. jsVarEvalAll
// has variable number of arguments with the same meaning
// as printf.
jsVarEvalAll("document.getElementById('mainSpan').innerHTML = '%.20s';", ctime(&lastSentTime));
}
// Actually, all previous jsVar actions were buffered. To
// perform real I/O operations one have to call "baioPoll".
// It shall be called as often as possible. It never blocks
// execution on I/O. If there is no I/O to do baioPoll waits
// until timeout, in this case 100000us aka 100ms.
baioPoll(100000);
}
}
//////////////////////////////////////////////////////////////////////
DEPENDENCIES
^^^^^^^^^^^^
If you want to use SSL you will need OpenSSL library. You can install
it with the command:
sudo apt-get install libssl-dev
JsVar uses "sglib.h". The file is included in this package. If you
want to use jsVar in your own directory you will have to copy this
file together with "jsvar.h" and "jsvar.c"
GETTING STARTED
^^^^^^^^^^^^^^^
After having downloaded and unpacked the library goto "examples" and
type:
make e1 run
It will compile and run the example "e1". Once running, open your web
browser and browse to the URL:
https://localhost:4321
Do the same for other examples (e2, e3, etc.) except of "e8" which
demonstrates the use of plain (non SSL) server and you have to connect
to:
http://localhost:4321
DOCUMENTATION
^^^^^^^^^^^^^
For the moment the documentation consists of a set of very simple
commented examples. Examples are short and easy to understand. They
demonstrate the major functions of the library. All examples are
simplified to maximum, there are no bells and whistles, no
overwhelming safety checks. They are meant to demonstrate jsVar
features without having any meaning in their own. If there is an
interest in this library I'll prepare a deeper documentation of all
provided functionalities.
The list of examples:
e1 - The simplest example showing current server time.
e2 - Sending binary data through binary websocket messages
e3 - 'Installing' your custom SSL certificates
e4 - Bidirectional communication between C and Javascript
e5 - Multi-page web server with HTML files.
e6 - Multi-page web server without file system.
e7 - International wide characters wchar_t.
e8 - Plain server not linked with Open-SSL.
e9 - A multiuser web page with "login" and "content" pages showing how
to add custom data to connection structure.
About
JSVAR - a C library for web GUIs with websockets.
Topics
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published