Hallo zusammen.
Habe mal wieder ein Problem.
Da es technisch nicht anderse geht das ich den Serversocket für kurz Abschalten muss damit der Client die Verbindung richtig abbaut.
Habe nun folgenen Sript geschreiben
$paID= IPS_GetInstance($this->InstanceID);
$connectionID=$paID['ConnectionID'];
if ($connectionID ==0) return;
.
.
.
IPS_Sleep (100);
IPS_SetProperty ($connectionID ,"Open",false);
IPS_ApplyChanges($connectionID );
IPS_Sleep (100);
IPS_SetProperty ($connectionID ,"Open",true);
IPS_ApplyChanges($connectionID );
Nun wenn nun das Modul starte bleibt die Konsole Hängen.
Und ich habe keine Möglichkeit was einzustellen.
Hat von euch jemand eine bessere Funktion um Serversocket aktiv bzw. inaktiv zu schalten
Danke
Das geht eleganter. Du kannst das Feld ‚Type‘ im Datenfluss des Serversocket benutzen.
Wenn du das auf 2 setzt, wird die passende Verbindung von ‚ClientPort‘ und ‚ClientIP‘ getrennt.
$Data = $Send; } $this->SendDebug('Send', $Data, 0); } else { $this->SendDebug('Send', SocketType::ToString($Type), 0); } $SendData['DataID'] = '{C8792760-65CF-4C53-B5C7-A30FCC84FEFE}'; $SendData['Buffer'] = utf8_encode($Data); $SendData['ClientIP'] = $Client->ClientIP; $SendData['ClientPort'] = $Client->ClientPort; $SendData['Type'] = $Type; return json_encode($SendData); } /** * Dekodiert die empfangenen Daten und sendet sie an die Childs. * * @param WebSocketFrame $Frame Ein Objekt welches einen kompletten Frame enthält. * @param Websocket_Client $Client Der Client von welchem die Daten empfangen wurden. */ private function DecodeFrame(WebSocketFrame $Frame, Websocket_Client $Client)
Ebenso kannst du beim Empfangen damit erkennen ob ein Client verbunden, getrennt wurde oder Daten sendet:
IPSNetwork/module.php at 0f925aff93ec8d5c9dfce65ecc17b83d957f3ee8 · Nall-chan/IPSNetwork · GitHub
Michael
Habe es nun so gemacht
$Server['DataID'] = '{C8792760-65CF-4C53-B5C7-A30FCC84FEFE}';
$Server['ClientIP'] = $ClientIP;
$Server['ClientPort']= (int)$ClientPort;
$Server['Buffer'] = mb_convert_encoding($response,'UTF-8');
$ServerJSON = json_encode($Server);
$this->SendDataToParent($ServerJSON);
$Server['DataID'] = '{C8792760-65CF-4C53-B5C7-A30FCC84FEFE}';
$Server['ClientIP'] = $ClientIP;
$Server['ClientPort']= (int)$ClientPort;
$Server['Buffer'] = mb_convert_encoding('','UTF-8');;
$Server['Type'] = 2;
$ServerJSON = json_encode($Server);
echo $this->SendDataToParent($ServerJSON);
aber nun kommt eine Warnung
19.03.2020 10:50:08 | Server Socket | Error reading: Bad file descriptor
was mache ich noch falch
Sicher das der Client überhaupt (noch) verbunden ist?
Ich würde auch kein mb_convert_encoding benutzen, sondern nur utf8_encode.
Michael