From ab03439e04f67483a13f58449c11bfb738cba337 Mon Sep 17 00:00:00 2001 From: netkas Date: Wed, 15 Jan 2025 15:21:44 -0500 Subject: [PATCH] Refactor peer synchronization and resolution logic. --- .../Classes/StandardMethods/ResolvePeer.php | 14 ++------- src/Socialbox/Socialbox.php | 29 +++++++++++++++++-- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/Socialbox/Classes/StandardMethods/ResolvePeer.php b/src/Socialbox/Classes/StandardMethods/ResolvePeer.php index 73ce94f..a83ee69 100644 --- a/src/Socialbox/Classes/StandardMethods/ResolvePeer.php +++ b/src/Socialbox/Classes/StandardMethods/ResolvePeer.php @@ -66,21 +66,11 @@ // Otherwise, resolve the peer from the remote server try { - $client = Socialbox::getExternalSession($peerAddress->getDomain()); + return $rpcRequest->produceResponse(Socialbox::resolveExternalPeer($peerAddress)); } catch(Exception $e) { - throw new StandardException(sprintf('There was an error while trying to connect to %s: %s', $peerAddress->getDomain(), $e->getMessage()), StandardError::RESOLUTION_FAILED, $e); - } - - // Return the result/error of the resolution - try - { - return $rpcRequest->produceResponse($client->resolvePeer($peerAddress)); - } - catch(RpcException $e) - { - throw new StandardException($e->getMessage(), StandardError::tryFrom($e->getCode()) ?? StandardError::UNKNOWN, $e); + throw new StandardException(sprintf('There was an error while trying to resolve the peer %s: %s', $peerAddress, $e->getMessage()), StandardError::RESOLUTION_FAILED, $e); } } } \ No newline at end of file diff --git a/src/Socialbox/Socialbox.php b/src/Socialbox/Socialbox.php index c903f0a..27d0d04 100644 --- a/src/Socialbox/Socialbox.php +++ b/src/Socialbox/Socialbox.php @@ -28,6 +28,7 @@ use Socialbox\Managers\SessionManager; use Socialbox\Objects\ClientRequest; use Socialbox\Objects\PeerAddress; + use Socialbox\Objects\Standard\Peer; use Socialbox\Objects\Standard\ServerInformation; use Throwable; @@ -734,15 +735,21 @@ /** * Synchronizes an external peer by resolving and integrating its information into the system. * - * @param PeerAddress|string $externalPeer The external peer to synchronize, provided as a PeerAddress instance or a string. + * @param PeerAddress|Peer|string $externalPeer The external peer to synchronize, provided as a PeerAddress instance or a string. * @return void * @throws CryptographyException If there is an error in the cryptography * @throws DatabaseOperationException If there is an error while processing the peer against the database * @throws ResolutionException If the synchronization process fails due to unresolved peer information or other errors. * @throws RpcException If there is an RPC exception while connecting to the remote server */ - public static function synchronizeExternalPeer(PeerAddress|string $externalPeer): void + public static function synchronizeExternalPeer(PeerAddress|Peer|string $externalPeer): void { + if($externalPeer instanceof Peer) + { + RegisteredPeerManager::synchronizeExternalPeer($externalPeer); + return; + } + if($externalPeer instanceof PeerAddress) { $externalPeer = $externalPeer->getAddress(); @@ -752,6 +759,24 @@ RegisteredPeerManager::synchronizeExternalPeer($client->resolvePeer($externalPeer)); } + /** + * Resolves an external peer based on the given peer address or string identifier. + * + * @param PeerAddress|string $externalPeer The external peer address or string identifier to be resolved. + * @return Peer The resolved external peer after synchronization. + */ + public static function resolveExternalPeer(PeerAddress|string $externalPeer): Peer + { + if($externalPeer instanceof PeerAddress) + { + $externalPeer = $externalPeer->getAddress(); + } + + $resolvedPeer = self::getExternalSession($externalPeer->getDomain())->resolvePeer($externalPeer); + self::synchronizeExternalPeer($resolvedPeer); + return $resolvedPeer; + } + /** * Retrieves the server information by assembling data from the configuration settings. *