aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/love/love.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/love/love.c')
-rw-r--r--src/love/love.c121
1 files changed, 39 insertions, 82 deletions
diff --git a/src/love/love.c b/src/love/love.c
index e90278a..0465ee5 100644
--- a/src/love/love.c
+++ b/src/love/love.c
@@ -53,7 +53,6 @@ typedef struct _Lscript
53 53
54int logDom = -1; // Our logging domain. 54int logDom = -1; // Our logging domain.
55static Eina_Strbuf *LuaSLStream; 55static Eina_Strbuf *LuaSLStream;
56static Eina_Strbuf *clientStream;
57static int scriptCount = 0; 56static int scriptCount = 0;
58static int compiledCount = 0; 57static int compiledCount = 0;
59static struct timeval startTime; 58static struct timeval startTime;
@@ -507,6 +506,10 @@ static Eina_Bool _delLuaSL(void *data, int type, Ecore_Con_Event_Server_Del *ev)
507 sprintf(buf, "%s/LuaSL &", prefix_bin_get()); 506 sprintf(buf, "%s/LuaSL &", prefix_bin_get());
508 system(buf); 507 system(buf);
509 count = 0; 508 count = 0;
509 // TODO - There's also the question of what to do if the connection failed.
510 // Did the server crash, or was it just the connection?
511 // Probably gonna need some smarts, for now we just restart all the scripts.
512 // Which I think gets done on server add.
510 } 513 }
511 514
512 // TODO - May want to renew even if it's not running the GUI, but then we still need some sort of "shut down" signal, which we don't need during testing. 515 // TODO - May want to renew even if it's not running the GUI, but then we still need some sort of "shut down" signal, which we don't need during testing.
@@ -523,7 +526,6 @@ static Eina_Bool _addClient(void *data, int type, Ecore_Con_Event_Client_Add *ev
523 gameGlobals *ourGlobals = data; 526 gameGlobals *ourGlobals = data;
524 527
525 ourGlobals->client = ev->client; 528 ourGlobals->client = ev->client;
526 ecore_con_client_timeout_set(ev->client, 0);
527 529
528 if (ourGlobals->client) 530 if (ourGlobals->client)
529 { 531 {
@@ -534,91 +536,54 @@ static Eina_Bool _addClient(void *data, int type, Ecore_Con_Event_Client_Add *ev
534 return ECORE_CALLBACK_RENEW; 536 return ECORE_CALLBACK_RENEW;
535} 537}
536 538
537static Eina_Bool _dataClient(void *data, int type, Ecore_Con_Event_Client_Data *ev) 539
540Eina_Bool clientParser(void *data, Connection *connection, char *SID, char *command, char *arguments)
538{ 541{
539 gameGlobals *ourGlobals = data; 542 gameGlobals *ourGlobals = data;
540// char buf[PATH_MAX];
541 char SID[PATH_MAX];
542 const char *command;
543 char *ext;
544 543
545 eina_strbuf_append_length(clientStream, ev->data, ev->size); 544 if (0 == strncmp(command, "events.touch_start", 18))
546 command = eina_strbuf_string_get(clientStream);
547 while ((ext = index(command, '\n')))
548 { 545 {
549 int length = ext - command; 546 Eina_Iterator *scripts;
547 LoveScript *me;
550 548
551 strncpy(SID, command, length + 1); 549 // TODO - For now, just send it to everyone.
552 SID[length] = '\0'; 550 scripts = eina_hash_iterator_data_new(ourGlobals->scripts);
553 eina_strbuf_remove(clientStream, 0, length + 1); 551 while(eina_iterator_next(scripts, (void **) &me))
554 ext = index(SID, '.');
555 if (ext)
556 { 552 {
557 ext[0] = '\0'; 553 sendForth(ourGlobals->serverLuaSL, me->SID, "events.detectedKeys({\"%s\"})", ownerKey);
558 command = ext + 1; 554 sendForth(ourGlobals->serverLuaSL, me->SID, "events.detectedNames({\"%s\"})", ownerName);
559 555 sendForth(ourGlobals->serverLuaSL, me->SID, "events.touch_start(1)");
560 if (0 == strncmp(command, "events.touch_start(", 19))
561 {
562 Eina_Iterator *scripts;
563 LoveScript *me;
564
565 // TODO - For now, just send it to everyone.
566 scripts = eina_hash_iterator_data_new(ourGlobals->scripts);
567 while(eina_iterator_next(scripts, (void **) &me))
568 {
569 sendForth(ourGlobals->serverLuaSL, me->SID, "events.detectedKeys({\"%s\"})", ownerKey);
570 sendForth(ourGlobals->serverLuaSL, me->SID, "events.detectedNames({\"%s\"})", ownerName);
571 sendForth(ourGlobals->serverLuaSL, me->SID, "events.touch_start(1)");
572 }
573 eina_iterator_free(scripts);
574 }
575 else if (0 == strncmp(command, "events.listen(", 14))
576 {
577 Eina_Iterator *scripts;
578 LoveScript *me;
579
580 // TODO - For now, just send it to everyone.
581 scripts = eina_hash_iterator_data_new(ourGlobals->scripts);
582 while(eina_iterator_next(scripts, (void **) &me))
583 {
584 sendForth(ourGlobals->serverLuaSL, me->SID, command);
585 }
586 eina_iterator_free(scripts);
587 }
588 else
589 PW("Unknown command from client - %s", command);
590 } 556 }
591 557 eina_iterator_free(scripts);
592 // Get the next blob to check it.
593 command = eina_strbuf_string_get(clientStream);
594 } 558 }
559 else if (0 == strncmp(command, "events.listen", 13))
560 {
561 Eina_Iterator *scripts;
562 LoveScript *me;
563 char buf[PATH_MAX];
564
565 // TODO - For now, just send it to everyone.
566 sprintf(buf, "%s(%s", command, arguments);
567 scripts = eina_hash_iterator_data_new(ourGlobals->scripts);
568 while(eina_iterator_next(scripts, (void **) &me))
569 {
570 sendForth(ourGlobals->serverLuaSL, me->SID, buf);
571 }
572 eina_iterator_free(scripts);
573 }
574 else
575 PW("Unknown command from client - %s(%s", command, arguments);
595 576
596 return ECORE_CALLBACK_RENEW; 577 return ECORE_CALLBACK_RENEW;
597} 578}
598 579
599static Eina_Bool _delClient(void *data, int type, Ecore_Con_Event_Client_Del *ev) 580static Eina_Bool _delClient(void *data, int type, Ecore_Con_Event_Client_Del *ev)
600{ 581{
601 gameGlobals *ourGlobals = data; 582 gameGlobals *ourGlobals = data;
602 583
603 if (ev->client) 584// TODO - I could coax this into something generic, maybe.
604 { 585 sendForth(ourGlobals->serverLuaSL, ownerKey, "exit()");
605 Eina_List const *clients; 586
606
607 // This is only really for testing, normally it just runs 24/7, or until told not to.
608 clients = ecore_con_server_clients_get(ourGlobals->server);
609 if (0 == eina_list_count(clients))
610 {
611 PD("No more clients, exiting.");
612 sendForth(ourGlobals->serverLuaSL, ownerKey, "exit()");
613 ecore_main_loop_quit();
614 }
615 else
616 {
617 PD("Some %d more clients, exiting anyway.", eina_list_count(clients));
618 sendForth(ourGlobals->serverLuaSL, ownerKey, "exit()");
619 ecore_main_loop_quit();
620 }
621 }
622 return ECORE_CALLBACK_RENEW; 587 return ECORE_CALLBACK_RENEW;
623} 588}
624 589
@@ -641,18 +606,10 @@ int main(int argc, char **argv)
641 if (ecore_con_init()) 606 if (ecore_con_init())
642 { 607 {
643 LuaSLStream = eina_strbuf_new(); 608 LuaSLStream = eina_strbuf_new();
644 clientStream = eina_strbuf_new();
645 reachOut("127.0.0.1", 8211, &ourGlobals, (Ecore_Event_Handler_Cb) _addLuaSL, (Ecore_Event_Handler_Cb) _dataLuaSL, (Ecore_Event_Handler_Cb) _delLuaSL); 609 reachOut("127.0.0.1", 8211, &ourGlobals, (Ecore_Event_Handler_Cb) _addLuaSL, (Ecore_Event_Handler_Cb) _dataLuaSL, (Ecore_Event_Handler_Cb) _delLuaSL);
646 610
647 if ((ourGlobals.server = ecore_con_server_add(ECORE_CON_REMOTE_TCP, ourGlobals.address, ourGlobals.port + 1, &ourGlobals))) 611 if (openArms("love", ourGlobals.address, ourGlobals.port + 1, &ourGlobals, (Ecore_Event_Handler_Cb) _addClient, NULL, (Ecore_Event_Handler_Cb) _delClient, clientParser))
648 { 612 {
649 ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_ADD, (Ecore_Event_Handler_Cb) _addClient, &ourGlobals);
650 ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) _dataClient, &ourGlobals);
651 ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL, (Ecore_Event_Handler_Cb) _delClient, &ourGlobals);
652 ecore_con_server_timeout_set(ourGlobals.server, 0);
653 ecore_con_server_client_limit_set(ourGlobals.server, -1, 0);
654
655
656 if (ecore_evas_init()) 613 if (ecore_evas_init())
657 { 614 {
658 if (edje_init()) 615 if (edje_init())