Fraunhofer-IIS / libjapi

libjapi is a universal JSON to C API library. It receives newline-delimited JSON (NDJSON) messages via TCP and calls registered C functions. A JSON response is returned for each request. Furthermore, it is also possible to create push services, which asynchronously push JSON messages to the clients subscribed to them.
MIT License
3 stars 1 forks source link

Multi client support - [merged] #63

Closed fraunhofer-iis-bot closed 1 year ago

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 28, 2019, 12:35

_Merges feature_multiclient -> dev

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 28, 2019, 12:36

Bei den push service responses von subscribe/unsubscribe, ist bei einem success nicht zu unterscheiden, ob gerade erfolgreich subscribed oder unsubscribed wurde. Soll ich das anpassen?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 12:54

Ja, finde ich schon. Wie ist es denn gerade und was würdest du vorschlagen?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 13:41

Evtl. kannst du das direkt zusammen mit dem #3 bearbeiten?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 28, 2019, 13:44

Ich würde das success Key zu subscribe/unsubscribe success abändern.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 13:56

Oder noch ein Feld hinzufügen? Eine Antwort könnte dann wie folgt ausschauen:

japi_pushsrv_response: pushsrv_abc action: subscribe success: true

Generell sollten wir uns alle Pushsrv-Responses noch einmal anschauen und vereinheitlichen.

Also japi_pushsrv_subscribe/unsubscribe list und push messages

Ich würde vorschlagen, lass es erst mal wie es ist (weil es hat mit dem Multiclient erst mal nichts zu tun) und mach ein neues Ticket auf bzw. ergänze das vorhandene.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 28, 2019, 14:10

added 1 commit

Compare with previous version

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:20

Commented on include/japi.h line 104

Von welcher Liste? Nur aus dem japi_context oder auch aus allen Push Services? Falls auch letzteres, dann erwähnen.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:20

Commented on include/japi.h line 106

Einrückung kaputt

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:21

Commented on include/japi.h line 113

Erst den japi_context als Parameter, dann den Socket, damit es einheitlich ist bei alles Funktionen.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:22

Commented on include/japi_pushsrv.h line 44

Zieh den clients Pointer bitte vor den next pointer. Der next Pointer sollte immer am Ende stehen, weil man ihn dadurch weniger schnell übersieht.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:24

Commented on src/japi.c line 214

Reihenfolge der Parameter drehen.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:25

Commented on src/japi.c line 249

Parameter drehen (siehe Bemerkung im Header)

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:29

Commented on src/japi.c line 271

Auf den ersten Blick ist "If single element" nur ein Spezialfall von "If first element" und kann weg?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:30

Commented on src/japi.c line 275

Hier schreib mal nur eine Funktion: japi_pushsrv_remove_client(socket). Die soll sich dann um den Rest kümmern.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:30

Commented on src/japi.c line 279

Nachdem du gefree't hast, darfst du nicht mehr darauf zugreifen!

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 28, 2019, 14:37

Commented on src/japi.c line 271

Glaube Nein, weil man ctx->clients sagen muss, ob es auf next oder auf NULL zeigt. Auf NULL sollte es nur zeigen wenn es ein einziges Element gibt.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 14:45

Commented on src/japi.c line 271

Schau es dir bitte noch mal an.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 17:42

Commented on src/japi.c line 218

Warum nicht so lassen? Ist das nicht überall so?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 17:42

Commented on src/japi.c line 231

Warum nicht so lassen? Ist das nicht überall so?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 17:42

Commented on src/japi.c line 237

Warum nicht so lassen? Ist das nicht überall so?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 17:48

Commented on src/japi.c line 426

Nicht so sinnvoll... :)

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 17:52

Commented on src/japi.c line 360

first_client_el kann weg. Du kommst mit ctx->client immer auf das erste Element.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 17:55

Commented on src/japi.c line 374

Warum so kompliziert?

Lass gt_socket weg und initialisiere nfds mit server_socket + 1. Dann checkst du in der oberen While-Schleife (Add add file descriptors to set), ob client->socket >= nfds. Wenn ja, dann machst du nfds = client->socket + 1. Die zweite while-Schleife kannst du dir dann sparen.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 17:58

Commented on src/japi_pushsrv.c line 33

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 18:02

Commented on src/japi_pushsrv.c line 76

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 18:04

Commented on src/japi_pushsrv.c line 138

Wie zeigst du an, dass der client erfolgreich ausgetragen wurde? Bzw. was ist, wenn er nicht eingetragen wurde?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 28, 2019, 18:09

Commented on src/japi_pushsrv.c line 383

Wir brauchen noch eine Funktion, mit der man einen Client aus allen PSCs entfernen kann. Oder du packst die doch in japi_remove_client rein und die Funktion iteriert dann über alle PSCs und ruft für jeden japi_pushsrv_remove_client auf.

Hier musst du dann die japi_remove_client aufrufen.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 11:14

Commented on src/japi.c line 271

Verstehe jetzt was passiert. Im pushsrv_remove macht er ein close socket auf fd 4 in psc->clients, der auch in der anderen Liste ist ctx->clients. Damit gibt write natürlich -1 zurück. Aber die Sockets müssen in beiden Listen sein. Muss ich vorher prüfen, ob der Socket in der anderen Liste schon existiert und dann entsprechend schließen?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 11:31

Commented on src/japi.c line 426

Das free(request)?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 11:44

Commented on src/japi_pushsrv.c line 76

If-Bedingungen auch durch asserts ersetzen?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 11:55

Commented on src/japi_pushsrv.c line 138

Mit return 0. Oder meinst du ich soll free per catch abfangen?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 12:06

Commented on src/japi_pushsrv.c line 383

Wenn ich einen Client aus allen Sockets entfernen will brauche ich den JAPI_context, oder? send_msg gibt mir nur einen aktuellen psc. Die Frage ist, wie ich damit an das erste Element komme.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 29, 2019, 15:14

Commented on src/japi.c line 426

Nein, dass du die Liste durchläufst ohne etwas zu machen. Wofür?

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 29, 2019, 15:15

Commented on src/japi_pushsrv.c line 76

Kann/darf der Anwender die Funktion aufrufen? Eigentlich nicht oder? In diesem Fall reicht ein assert und die Funktionsdeklaration muss in den internal Header.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 29, 2019, 15:18

Commented on src/japi_pushsrv.c line 138

Es gibt in C kein try/catch oder was meinst du mit "per catch abfangen"?

Wenn ich das richtig sehe, wird return 0 für beide Fälle zurückgegeben: Element ausgetragen und Element nicht gefunden.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 29, 2019, 15:22

Commented on src/japi_pushsrv.c line 383

Das ist ein guter Einwand. Man könnte in psc einen Pointer auf den japi context einbauen, der beim erstellen eines pushsrv Kontextes gesetzt wird. Dann käme man über psc auch wieder zurück auf ctx. Nicht wirklich schön, aber spontan fällt mir nichts besseres ein.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @cstender on May 29, 2019, 15:24

Commented on src/japi.c line 271

Es sollte eigentlich kein Problem sein ein Close 2x aufzurufen. Du kannst aber das close auch nur dort aufrufen, wo write das erste mal einen Fehler gemeldet hat.

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:51

Commented on src/japi_pushsrv.c line 138

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:51

Commented on src/japi_pushsrv.c line 76

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:51

Commented on src/japi_pushsrv.c line 33

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:51

Commented on src/japi.c line 374

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:52

Commented on src/japi.c line 360

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:52

Commented on src/japi.c line 426

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:52

Commented on src/japi.c line 237

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:52

Commented on src/japi.c line 231

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:52

Commented on src/japi.c line 218

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:52

Commented on src/japi.c line 279

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:53

Commented on src/japi.c line 271

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:53

Commented on src/japi.c line 249

done

fraunhofer-iis-bot commented 5 years ago

In GitLab by @fraunhofer-iis-anon on May 29, 2019, 16:53

Commented on src/japi.c line 214

done