-
-
Notifications
You must be signed in to change notification settings - Fork 78
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WIP base for backend presence client events, to allow bots to type an…
…d more. Relocated Channel classes to sub directory.
- Loading branch information
Showing
10 changed files
with
483 additions
and
6 deletions.
There are no files selected for viewing
2 changes: 1 addition & 1 deletion
2
src/Broadcasting/CallChannel.php → src/Broadcasting/Channels/CallChannel.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
src/Broadcasting/ProviderChannel.php → ...Broadcasting/Channels/ProviderChannel.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
src/Broadcasting/ThreadChannel.php → src/Broadcasting/Channels/ThreadChannel.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<?php | ||
|
||
namespace RTippin\Messenger\Broadcasting\ClientEvents; | ||
|
||
use RTippin\Messenger\Broadcasting\MessengerBroadcast; | ||
|
||
class Read extends MessengerBroadcast | ||
{ | ||
/** | ||
* The event's broadcast name. | ||
* | ||
* @return string | ||
*/ | ||
public function broadcastAs(): string | ||
{ | ||
return 'client-read'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<?php | ||
|
||
namespace RTippin\Messenger\Broadcasting\ClientEvents; | ||
|
||
use RTippin\Messenger\Broadcasting\MessengerBroadcast; | ||
|
||
class StopTyping extends MessengerBroadcast | ||
{ | ||
/** | ||
* The event's broadcast name. | ||
* | ||
* @return string | ||
*/ | ||
public function broadcastAs(): string | ||
{ | ||
return 'client-stop-typing'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<?php | ||
|
||
namespace RTippin\Messenger\Broadcasting\ClientEvents; | ||
|
||
use RTippin\Messenger\Broadcasting\MessengerBroadcast; | ||
|
||
class Typing extends MessengerBroadcast | ||
{ | ||
/** | ||
* The event's broadcast name. | ||
* | ||
* @return string | ||
*/ | ||
public function broadcastAs(): string | ||
{ | ||
return 'client-typing'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
<?php | ||
|
||
namespace RTippin\Messenger\Support; | ||
|
||
use Closure; | ||
use InvalidArgumentException; | ||
use RTippin\Messenger\Broadcasting\ClientEvents\Read; | ||
use RTippin\Messenger\Broadcasting\ClientEvents\StopTyping; | ||
use RTippin\Messenger\Broadcasting\ClientEvents\Typing; | ||
use RTippin\Messenger\Broadcasting\MessengerBroadcast; | ||
use RTippin\Messenger\Contracts\MessengerProvider; | ||
use RTippin\Messenger\Facades\Messenger; | ||
use RTippin\Messenger\Models\Message; | ||
|
||
class PresenceEvents | ||
{ | ||
/** | ||
* @var string|MessengerBroadcast | ||
*/ | ||
private static string $typingClass = Typing::class; | ||
|
||
/** | ||
* @var string|MessengerBroadcast | ||
*/ | ||
private static string $stopTypingClass = StopTyping::class; | ||
|
||
/** | ||
* @var string|MessengerBroadcast | ||
*/ | ||
private static string $readClass = Read::class; | ||
|
||
/** | ||
* @var Closure|null | ||
*/ | ||
private static ?Closure $typingClosure = null; | ||
|
||
/** | ||
* @var Closure|null | ||
*/ | ||
private static ?Closure $stopTypingClosure = null; | ||
|
||
/** | ||
* @var Closure|null | ||
*/ | ||
private static ?Closure $readClosure = null; | ||
|
||
/** | ||
* @param Closure $typing | ||
*/ | ||
public static function setTypingClosure(Closure $typing): void | ||
{ | ||
self::$typingClosure = $typing; | ||
} | ||
|
||
/** | ||
* @param string $abstractTyping | ||
* @throws InvalidArgumentException | ||
*/ | ||
public static function setTypingClass(string $abstractTyping): void | ||
{ | ||
if (! Helpers::checkIsSubclassOf($abstractTyping, MessengerBroadcast::class)) { | ||
throw new InvalidArgumentException("$abstractTyping must extend our base ".MessengerBroadcast::class); | ||
} | ||
|
||
self::$typingClass = $abstractTyping; | ||
} | ||
|
||
/** | ||
* @return string | ||
*/ | ||
public static function getTypingClass(): string | ||
{ | ||
return self::$typingClass; | ||
} | ||
|
||
/** | ||
* @param Closure $stopTyping | ||
*/ | ||
public static function setStopTypingClosure(Closure $stopTyping): void | ||
{ | ||
self::$stopTypingClosure = $stopTyping; | ||
} | ||
|
||
/** | ||
* @param string $abstractStopTyping | ||
* @throws InvalidArgumentException | ||
*/ | ||
public static function setStopTypingClass(string $abstractStopTyping): void | ||
{ | ||
if (! Helpers::checkIsSubclassOf($abstractStopTyping, MessengerBroadcast::class)) { | ||
throw new InvalidArgumentException("$abstractStopTyping must extend our base ".MessengerBroadcast::class); | ||
} | ||
|
||
self::$stopTypingClass = $abstractStopTyping; | ||
} | ||
|
||
/** | ||
* @return string | ||
*/ | ||
public static function getStopTypingClass(): string | ||
{ | ||
return self::$stopTypingClass; | ||
} | ||
|
||
/** | ||
* @param Closure $read | ||
*/ | ||
public static function setReadClosure(Closure $read): void | ||
{ | ||
self::$readClosure = $read; | ||
} | ||
|
||
/** | ||
* @param string $abstractRead | ||
* @throws InvalidArgumentException | ||
*/ | ||
public static function setReadClass(string $abstractRead): void | ||
{ | ||
if (! Helpers::checkIsSubclassOf($abstractRead, MessengerBroadcast::class)) { | ||
throw new InvalidArgumentException("$abstractRead must extend our base ".MessengerBroadcast::class); | ||
} | ||
|
||
self::$readClass = $abstractRead; | ||
} | ||
|
||
/** | ||
* @return string | ||
*/ | ||
public static function getReadClass(): string | ||
{ | ||
return self::$readClass; | ||
} | ||
|
||
/** | ||
* @param MessengerProvider $provider | ||
* @return array | ||
*/ | ||
public static function makeTypingEvent(MessengerProvider $provider): array | ||
{ | ||
if (is_null(self::$typingClosure)) { | ||
return [ | ||
'provider_id' => $provider->getKey(), | ||
'provider_alias' => Messenger::findProviderAlias($provider), | ||
'name' => $provider->getProviderName(), | ||
'avatar' => $provider->getProviderAvatarRoute(), | ||
]; | ||
} | ||
|
||
return (self::$typingClosure)($provider); | ||
} | ||
|
||
/** | ||
* @param MessengerProvider $provider | ||
* @return array | ||
*/ | ||
public static function makeStopTypingEvent(MessengerProvider $provider): array | ||
{ | ||
if (is_null(self::$stopTypingClosure)) { | ||
return [ | ||
'provider_id' => $provider->getKey(), | ||
'provider_alias' => Messenger::findProviderAlias($provider), | ||
'name' => $provider->getProviderName(), | ||
'avatar' => $provider->getProviderAvatarRoute(), | ||
]; | ||
} | ||
|
||
return (self::$stopTypingClosure)($provider); | ||
} | ||
|
||
/** | ||
* @param MessengerProvider $provider | ||
* @param Message $message | ||
* @return array | ||
*/ | ||
public static function makeReadEvent(MessengerProvider $provider, Message $message): array | ||
{ | ||
if (is_null(self::$readClosure)) { | ||
return [ | ||
'provider_id' => $provider->getKey(), | ||
'provider_alias' => Messenger::findProviderAlias($provider), | ||
'name' => $provider->getProviderName(), | ||
'avatar' => $provider->getProviderAvatarRoute(), | ||
'message_id' => $message->id, | ||
]; | ||
} | ||
|
||
return (self::$readClosure)($provider, $message); | ||
} | ||
} |
Oops, something went wrong.