PHP Websocket Client for OBS-Studio (with Auth)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Websocket Client for OBS-Studio (with Auth)

    Hallo,

    ich habe ein (Verständniss-) Problem mit Sockets bzw. Websockets.

    Ich möchte mich mit einem existierenden Websocket-Server verbinden (das ist der Websocket Server (als Plugin) https://github.com/Palakis/obs-websocket für das OBS-Studio), was soweit erstmal auch gut funktioniert.
    Hier die Kurzform des Codes hierfür:
    PHP-Code:
    $data['request-type']    = "GetAuthRequired";
    $data['message-id']     = "asdasdaas76da7sd6asd6as7d";
    $data json_encode($data);
    $authRequired sendRequest($data$host$port$local$errno$errstr);

    function 
    sendRequest ($data$host$port$local,  $errno$errstr) {
        
    //WebSocket open
        
    $sock fsockopen($host$port$errno$errstr2);
        
    //WebSocket handshake
        
    fwrite($sockgetHeader($data$host$local) ) or die('error:'.$errno.':'.$errstr);
        
    $headers fread($sock2000);
        
    fwrite($sockhybi10Encode($data)) or die('error:'.$errno.':'.$errstr);
        
    $wsdata fread($sock2000);
        
    $response hybi10Decode($wsdata);
        
    // websocket close
        
    fclose($sock);
        return 
    json_decode($response);
    }

    function 
    getHeader($data$host$local) {
        
    $head "GET / HTTP/1.1"."\r\n".
                
    "Upgrade: WebSocket"."\r\n".
                
    "Connection: Upgrade"."\r\n".
                
    "Origin: $local"."\r\n".
                
    "Host: $host"."\r\n".
                
    "Sec-WebSocket-Version: 13"."\r\n".
                
    "Sec-WebSocket-Key: asdasdaas76da7sd6asd6as7d"."\r\n".
                
    "Content-Length: ".strlen($data)."\r\n"."\r\n";
        return 
    $head;

    Jetzt möchte ich die Verbindung zum Websocket-Server für die spätere Verwendung natürlich mit einem Passwort versehen. Wenn ich dies tue muss ich mich natürlich Authentifizieren - das klappt auch. Nur wenn ich jetzt "quasi" authentifiziert weitere requests durchführen möchte kennt der Server mich nicht mehr da ich ja für jeden Request :
    1. $sock = fsockopen($host, $port, $errno, $errstr, 2); // Socket öffne
    2. Request sende + Antwort erhalte
    3. fclose() und den Stream bzw. das Socket wieder schließe.
    Und wenn das Socket zu ist und ich ein neues aufmache dann bin ich nicht mehr authentifiziert....

    Jetzt wollte ich das so abändern, das folgendes funktioniert :
    1.) Socket öffnen / Verbindung herstellen
    2.) Authentifizieren (1. Request call sendRequest(...))
    3.) Weitere requests durchführen -> was aber nicht funktioniert
    4.) Socket schliessen

    Kann mir mal bitte wer auf die Sprünge helfen?

    Danke euch
Lädt...
X