$clacks->doNetwork(); while(my $msg = $clacks->getNext()) { if($msg->{type} eq 'serverinfo') { print "Connected to clacks server with version ", $msg->{data}, "\n"; next; } if($msg->{type} eq 'disconnect') { # Disconnected from clacks, wait 10 seconds and then restart print "Clacks disconnect\n"; sleep(10); exit(0); } next unless($msg->{type} eq 'set'); if($msg->{name} eq 'OBS::SelectScene') { if(!defined($scenes{$msg->{data}})) { print "Invalid scene selected\n"; } my %request = ( 'request-type' => 'SetCurrentScene', 'scene-name' => $scenes{$msg->{data}}, 'message-id' => 'rand' . int(rand(1_000_000)), ); my $outframe = $frame->new(buffer => encode_json(\%request), type => 'text', masked => 1)->to_bytes; syswrite($sock, $outframe); } elsif($msg->{name} eq 'OBS::MuteVoice') { my $ismute = $msg->{data}; my %request = ( 'request-type' => 'SetMute', 'message-id' => 'rand' . int(rand(1_000_000)), 'source' => 'Mike', 'mute' => \1, ); if(!$ismute) { $request{mute} = \0; } my $buffer = encode_json(\%request); print "--\n", $buffer, "\n--\n"; my $outframe = $frame->new(buffer => encode_json(\%request), type => 'text', masked => 1)->to_bytes; syswrite($sock, $outframe); } elsif($msg->{name} eq 'OBS::Streaming') { my $type = 'StopStreaming'; if($msg->{data} == 1) { $type = 'StartStreaming'; } my %request = ( 'request-type' => $type, 'message-id' => 'rand' . int(rand(1_000_000)), ); my $outframe = $frame->new(buffer => encode_json(\%request), type => 'text', masked => 1)->to_bytes; syswrite($sock, $outframe); } elsif($msg->{name} eq 'OBS::Recording') { my $type = 'StopRecording'; if($msg->{data} == 1) { $type = 'StartRecording'; } my %request = ( 'request-type' => $type, 'message-id' => 'rand' . int(rand(1_000_000)), ); my $outframe = $frame->new(buffer => encode_json(\%request), type => 'text', masked => 1)->to_bytes; syswrite($sock, $outframe); } } if($nextping < time) { $clacks->ping(); $nextping = time + 30; } $clacks->doNetwork(); }