-
Hallo Rainer,
danke für deine Antwort. Du hast richtig erkannt, dass ich mich auf dem Redis für ein Event abonnieren möchte. Für die meisten gängigen Programmiersprachen (Java, Node.js, ...) gibt es dafür bereits fertige Clients. Ich würde das aber gerne direkt im RPG machen. Du kennst ja den Node.js Code. Bist du der Meinung, dass man das Abonnieren auch im RPG nachbauen kann? Das Schreiben eines Events haben wir ja bereits vor Jahren in RPG gebaut. Ich fürchte, dass das Abonnieren aber komplizierter ist, oder?
Hier mal unser Schreibprogramm für Redis. ist nicht sehr lang, finde ich. Wenn man so etwas für's Lesen hinbekäme, wäre ich am Ziel. Wenn nicht, werden wir es wahrscheinlich mit in RPG eingebettetem Java realisieren.
Code:
*============================================================================================* * Programm-Aufgabe Event an Redis Server schicken *
* Generierung 27.08.2013 *
* Programmierer HIN *
*============================================================================================*
D/COPY LIBHTTP/QRPGLESRC,socket_h
*
*=========================================================================
D translate PR ExtPgm('QDCXLATE')
D Length 5P 0 const
D Data 32766A options(*varsize)
D Table 10A const
*
*=========================================================================
D ecc_ip_addr S 10U 0
D ecc_socket S 10I 0
D ecc_connection S 10I 0
D ecc_sockaddr DS LIKEDS(sockaddr_in)
*
D ecc_cmd S 1000A
D ecc_len S 10I 0
*
D ecc_temp S 100A
D ecc_response S 100A varying
*
D CRLF C x'0d25'
D KlammerAuf C x'c0'
D KlammerZu C x'd0'
*=========================================================================
* Main
*=========================================================================
C *ENTRY PLIST
C PARM P#SCode 3 Steuercode
C PARM host 100
C PARM port 5 0
C PARM topic 100
C PARM data 1000
C PARM response 5 0
C PARM errMsg 100
ecc_ip_addr = inet_addr(%trim(host));
if (ecc_ip_addr = INADDR_NONE);
p_hostent = gethostbyname(%trim(host));
if (p_hostent = *null);
errMsg = 'Host not found!';
else;
ecc_ip_addr = h_addr;
endif;
endif;
ecc_socket = socket(AF_INET:SOCK_STREAM:IPPROTO_IP);
if (ecc_socket = -1);
errMsg = 'Error has occurred during create socket';
endif;
ecc_sockaddr = *allx'00';
ecc_sockaddr.sin_family = AF_INET; // Type of address
ecc_sockaddr.sin_addr = ecc_ip_addr; // IP adress
ecc_sockaddr.sin_port = port; // port number
ecc_connection = connect(ecc_socket
:%addr(ecc_sockaddr)
:%size(ecc_sockaddr));
if (ecc_connection = -1);
errMsg = 'Error has occurred during connect';
endif;
ecc_cmd = '*3' + CRLF
+ '$7' + CRLF + 'PUBLISH' + CRLF
+ '$' + %char(%len(%trim(topic))) + CRLF + %trim(topic) + CRLF
+ '$' + %char(%len(%trim(data ))) + CRLF + %trim(data ) + CRLF;
callp translate(%len(%trimr(ecc_cmd)):ecc_cmd:'QTCPASC');
ecc_len = send(ecc_socket
:%addr(ecc_cmd)
:%len(%trimr(ecc_cmd))
: 0);
if (ecc_len < %len(%trimr(ecc_cmd)));
errMsg = 'Error during send.';
endif;
ecc_len = recv(ecc_socket:%addr(ecc_temp):%size(ecc_temp):0);
if (ecc_len = -1);
errMsg = 'Error during recv.';
else;
ecc_response = %subst(ecc_temp:1:ecc_len);
ecc_len = %len(ecc_response);
ecc_temp = ecc_response;
callp translate(ecc_len:ecc_temp:'QTCPEBC');
ecc_response = %subst(ecc_temp:2:ecc_len - 3);
response = %dec(ecc_response:5:0);
endif;
callp close(ecc_socket);
return;
Similar Threads
-
By RPG_KL in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 30-07-20, 19:04
-
By berg01796 in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 15-11-16, 11:55
-
By Der Gute in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 01-07-02, 11:11
-
By Bärnd in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 29-05-02, 15:58
-
By Andreas Herzfeldt in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 02-07-01, 06:51
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks