Autor Wątek: Massive Multiplayer Online (MMO) w HTML5  (Przeczytany 2997 razy)

# Kwiecień 15, 2013, 22:28:35
Najgorszy jest start, więc dla leniwych rzucę potencjalnym kodem.

Będę używać biblioteki libwebsockets do obsługi websocków.
mobą być oczywiście inne, dla np. innych języków.
Xirdus może zrobić serwer w Pythonie, ważne żeby była HTML5

main.c
#include "libwebsockets.h"
#include "lws_config.h"



static int terminate;



static int
callback_fraggle(struct libwebsocket_context *context,
struct libwebsocket *wsi,
enum libwebsocket_callback_reasons reason,
       void *user, void *in, size_t len)
{
switch (reason) {
        case LWS_CALLBACK_ESTABLISHED:
            printf("Nowy klient\n");
            break;
        case LWS_CALLBACK_RECEIVE: {


char *message=in;


            libwebsocket_write(wsi, message, len, LWS_WRITE_TEXT);

if(message[0]=='@')
terminate=1;


            break;
        }
        default:
            break;
    }
   
   
    return 0;

}




static struct libwebsocket_protocols protocols[] = {
{
"my-protocol",
callback_fraggle,
0,
},
{
NULL, NULL, 0 /* End of list */
}
};



int main()
{
int port = 9000;
int n = 0;
struct libwebsocket_context *context;
int opts = 0;
const char *iface = NULL;
int server_port = port;
struct lws_context_creation_info info;
memset(&info, 0, sizeof info);
info.port = server_port;
info.iface = iface;
info.protocols = protocols;
info.gid = -1;
info.uid = -1;
info.options = opts;

context = libwebsocket_create_context(&info);
if (context == NULL) {
fprintf(stderr, "libwebsocket init failed\n");
return -1;
}


n = 0;
while (!n && !terminate)
{
n = libwebsocket_service(context, 500);

printf("wait \n");
}
printf("end \n");


libwebsocket_context_destroy(context);

return 0;
}

index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
window.WebSocket = window.WebSocket || window.MozWebSocket;
 
var websocket = new WebSocket('ws://127.0.0.1:9000','my-protocol');
 
websocket.onopen = function () {
$('h1').css('color', 'green');
};
 
websocket.onerror = function () {
$('h1').css('color', 'red');
};
 
websocket.onmessage = function (message) {
console.log(message.data);
$('div').append($('<p>', { text: message.data }));
};
 
$('button').click(function(e) {
e.preventDefault();
websocket.send($('input').val());
$('input').val('');
});
});
</script>
</head>
<body>
<h1>WebSockets test</h1>
<form>
<input type="text" />
<button>Send</button>
</form>
<div></div>
</body>
</html>

Makefile
OBJS=d

all: $(OBJS)
gcc main.c libwebsockets.a -lssl -lcrypto -ldl -lz -o d

Termin od miesiąca do aż 3 miesięcy. (do 14 lipca 2013)
Cel: Podniesienie umiejętności z sieci, popularyzacja HTML5, "nowy wymiar gier przeglądarkowych"

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Avaj

  • Użytkownik

  • +2
# Kwiecień 15, 2013, 22:30:33
Tak na logikę to do gier w HTML5 najlepiej chyba serwer na node.js oprzeć bo można współdzielić kod javascriptowy

Offline Xion

  • Redaktor
    • xion.log

  • +1
# Kwiecień 15, 2013, 23:05:34
@up: W teorii tak, a w praktyce jest to raczej nietrywialne. Osobiście ograniczałbym ilość JavaScriptu w projekcie do minimum :)

A co do propozycji OP: w 3 miesiące samemu to można co najwyżej zrobić multiplayerowego Minesweepera ;-)

Offline Xirdus

  • Redaktor

# Kwiecień 15, 2013, 23:45:20
Ja i Python? Ale od kiedy? :U

Raczej nie będę się pisał, bo po pierwsze nie kręci mnie HTML (ani cokolwiek co "webowe"), a po drugie nie mam czasu w tym terminie. IMO lepiej się szykować na WSoC :P

# Kwiecień 16, 2013, 23:54:46
Tak sobie dziubię tą gierkę, jest ciężko ale nadzieja w sukces podsyca wytrwałość.

Offline Kos

  • Użytkownik
    • kos.gd

# Kwiecień 17, 2013, 10:48:09
Cytuj
@up: W teorii tak, a w praktyce jest to raczej nietrywialne.

Tak. Z moich doświadczeń, w grze na node.js rzeczywiście da się uwspólnić kod odpowiadający za symulację logiki, ale często po stronie serwera i klienta trzeba wprowadzać drobne różnice w szczegółach. Dużym wyzwaniem wydaje mi się tak zorganizować kod, by część wspólną dało się wyodrębnić bezboleśnie.

Cytuj
A co do propozycji OP: w 3 miesiące samemu to można co najwyżej zrobić multiplayerowego Minesweepera ;-)
Uhh, przesadzasz. Na compotach czas leci inaczej. :D