Skip to content

Commit 1588cc8

Browse files
author
QuasarStream Team
committed
replace the associative array with type-safe objects
1 parent 2df097d commit 1588cc8

File tree

2 files changed

+31
-24
lines changed

2 files changed

+31
-24
lines changed

src/RTCConfiguration.php

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,18 @@ class RTCConfiguration implements RTCConfigurationInterface
5555
/**
5656
* Constructs a new RTCConfiguration instance
5757
*
58-
* @param array|null $configuration Optional configuration array. If null,
59-
* default configuration with a Google STUN server will be used.
60-
* Expected keys:
61-
* - 'iceServers': Array of ICE server configurations
62-
* - 'certificatePath': Path to a certificate file (optional)
63-
* - 'privateKeyPath': Path to a private key file (optional)
64-
* @throws InvalidArgumentException If iceServer configuration is invalid
58+
* @param array<RTCIceServerInterface> $iceServers
59+
* @param string|null $certificatePath
60+
* @param string|null $privateKeyPath
6561
*/
66-
public function __construct(?array $configuration = null)
67-
{
68-
$configuration !== null ? $this->parseConfiguration($configuration) : $this->getDefaultConfiguration();
62+
public function __construct(
63+
array $iceServers = [],
64+
?string $certificatePath = null,
65+
?string $privateKeyPath = null
66+
) {
67+
$this->iceServers = empty($iceServers) ? $this->getDefaultIceServer() : $iceServers;
68+
$this->certificatePath = $certificatePath;
69+
$this->privateKeyPath = $privateKeyPath;
6970
}
7071

7172
/**
@@ -149,11 +150,11 @@ public function setPrivateKeyPath(?string $privateKeyPath): void
149150
* - 'iceServers': Array of ICE server configurations (required if present)
150151
* - 'certificatePath': Path to a certificate file (optional)
151152
* - 'privateKeyPath': Path to a private key file (optional)
152-
* @return void
153-
* @throws InvalidArgumentException If iceServer configuration is missing required 'urls' key
153+
* @return RTCConfiguration
154154
*/
155-
private function parseConfiguration(array $configuration): void
155+
public static function parseConfiguration(array $configuration): self
156156
{
157+
$iceServers = [];
157158
if (isset($configuration['iceServers'])) {
158159
foreach ($configuration["iceServers"] as $iceServer) {
159160
if (!isset($iceServer["urls"])) {
@@ -166,23 +167,28 @@ private function parseConfiguration(array $configuration): void
166167
$iceServerObj->setCredential($iceServer["credential"] ?? null);
167168
$iceServerObj->setCredentialType($iceServer["credentialType"] ?? null);
168169

169-
$this->addIceServer($iceServerObj);
170+
$iceServers[] = $iceServerObj;
170171
}
172+
}else{
173+
$iceServers = (new RTCConfiguration)->getDefaultIceServer();
171174
}
172175

173-
$this->certificatePath = $configuration["certificatePath"] ?? null;
174-
$this->privateKeyPath = $configuration["privateKeyPath"] ?? null;
176+
$certificatePath = $configuration["certificatePath"] ?? null;
177+
$privateKeyPath = $configuration["privateKeyPath"] ?? null;
178+
179+
return new static($iceServers, $certificatePath, $privateKeyPath);
175180
}
176181

177182
/**
178-
* Sets up default configuration with Google's public STUN server
183+
* return the default ice configuration with Google's public STUN server
179184
*
180-
* @return void
185+
* @return array<RTCIceServer>
181186
*/
182-
private function getDefaultConfiguration(): void
187+
private function getDefaultIceServer(): array
183188
{
184189
$iceServer = new RTCIceServer();
185190
$iceServer->setUrls([self::DEFAULT_STUN_SERVER]);
186-
$this->addIceServer($iceServer);
191+
192+
return [$iceServer];
187193
}
188194
}

src/RTCPeerConnection.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,13 +245,14 @@ class RTCPeerConnection extends EventEmitter implements RTCPeerConnectionInterfa
245245
/**
246246
* Creates a new RTCPeerConnection instance.
247247
*
248-
* @param array|RTCConfiguration|null $configuration Configuration options for the connection
248+
* @param array|RTCConfigurationInterface $configuration Configuration options for the connection
249+
* @throws DateInvalidOperationException If there's an SSL-related error
250+
* @throws OpenSSLException If there's an SSL-related error
249251
* @throws RTCCertificateException If certificate generation fails
250-
* @throws OpenSSLException|DateInvalidOperationException If there's an SSL-related error
251252
*/
252-
public function __construct(null|array|RTCConfigurationInterface $configuration = null)
253+
public function __construct(array|RTCConfigurationInterface $configuration = [])
253254
{
254-
$this->configuration = $configuration instanceof RTCConfigurationInterface ? $configuration : new RTCConfiguration($configuration);
255+
$this->configuration = $configuration instanceof RTCConfigurationInterface ? $configuration : RTCConfiguration::parseConfiguration($configuration);
255256
$this->certificates[] = new RTCCertificate($this->configuration->getPrivateKeyPath(), $this->configuration->getCertificatePath());
256257
$this->cname = Uuid::uuid4()->toString();
257258
$this->streamId = Uuid::uuid4()->toString();

0 commit comments

Comments
 (0)