23. Januar 2013 10:28
// Send
// Check if ComCom2 is clear
IF ISCLEAR(ComCom2) THEN
IF NOT CREATE(ComCom2) THEN
ERROR('Failed to create Communication Component');
// Check if Socket Bus Adapter is clear
IF ISCLEAR(SocketBusAdapter) THEN
IF NOT CREATE(SocketBusAdapter) THEN
ERROR('Failed to create SocketBusAdapter');
// Add the Winsock to the Comunication Component
ComCom2.AddBusAdapter(SocketBusAdapter, 0);
OutMsg:= ComCom2.CreateoutMessage('Sockets://localhost:6050');
// Create Output XML-File
// Initialisierung des Dokuments
CREATE(XMLDomDoc);
//Knoten erstellen und dem Dokument hinzufügen.
NewNode := XMLDomDoc.createNode(1,'WaWi','');
XMLDomDoc.appendChild(NewNode);
NewNodeBcmd := XMLDomDoc.createNode(1,'OCmd','');
NewNode.appendChild(NewNodeBcmd);
// Hinzufügen eines Attributs zu dem Knoten
NewAttribute := XMLDomDoc.createAttribute('RequesterNumber');
NewAttribute.value := '1';
NewNodeBcmd.attributes.setNamedItem(NewAttribute);
// Hinzufügen eines Attributs zu dem Knoten
NewAttribute := XMLDomDoc.createAttribute('OrderNumber');
NewAttribute.value := '4771';
NewNodeBcmd.attributes.setNamedItem(NewAttribute);
OutStr:= OutMsg.GetStream();
OutStr.WRITE(XMLDomDoc.xml);
OutMsg.Send(0);
//////////////////////////////////////////////////////////////////////////////////////
// Receive
ReceiveDoc := FALSE;
IF NOT CONFIRM('Ready to read', TRUE)THEN EXIT; //remove
// Prevent waiting for the reply
SocketBusAdapter.CloseSendWhenWaitForReply:= TRUE;
InMsg:= OutMsg.SendWaitForReply(20000);
IF (ISCLEAR(InMsg)) THEN
ERROR('Fehler');
InStr:= InMsg.GetStream();
WHILE NOT (InStr.EOS) DO
BEGIN
InStr.READ(txt);
MESSAGE(txt);
END;
InMsg.CommitMessage();
23. Januar 2013 10:37
23. Januar 2013 11:29
fiddi hat geschrieben:Wenn du noch eine NAV5.x Version hast, schau mal in den "Gemeinsame Dateien\NAV??\Communication Component"- Ordner von NAV, da ist eine Hilfe mit Beispielen für die Komponenten enthalten.
23. Januar 2013 11:35
23. Januar 2013 15:03
fiddi hat geschrieben:schau dir doch mal die aktuellen ADCS- Module an, die benutzen auch den Socket-Bus.
23. Januar 2013 15:46
Es sind also alles Rechner mit Windows 7 oder XP - also keine VT100 Stationen im Einsatz.
23. Januar 2013 18:58
23. Januar 2013 21:21
24. Januar 2013 16:07
martinst hat geschrieben:Spontane, villeicht doofe, Idee:
Deine CodeUnit ist schon eine SingleInstance-CodeUnit?
SocketBusAdapter.CloseSendWhenWaitForReply:= TRUE;
InMsg:= OutMsg.SendWaitForReply(20000);
4. März 2013 13:57
22. Juli 2013 13:55
kyrios hat geschrieben:...
Das heißt - wenn ich die Zeile mit "CloseSendWhenWaitForReply" auskommentiere, funktioniert auch alles, wie gewollt. Jedoch können dann mehrere Anfragen zur gleichen Zeit (mit ein paar Millisekunden dazwischen) gesendet werden. Das wäre dann ja schlecht. Das muss ich noch iwi unterbinden können.
...
OutMsg.Send(0);
InMsg:= OutMsg.SendWaitForReply(20000);
OutMsg.Send(0);
SocketBusAdapter.CloseSendWhenWaitForReply:= TRUE;
InMsg.CommitMessage();