top: calc(48px - 37px);
left: calc(48px - 41px);
position: relative;
-}
\ No newline at end of file
+}
+
+/* Spinner */
+.connecting-spinner {
+ /*display: inline-block;*/
+ position: absolute;
+ left: calc(50% - 68px);
+ top: calc(50% - 68px);
+
+
+ width: 130px;
+ height: 130px;
+ }
+.connecting-spinner:after {
+ content: " ";
+ display: block;
+ width: 108px;
+ height: 108px;
+ margin: 8px;
+ border-radius: 50%;
+ border: 6px solid #fff;
+ border-color: #fff transparent #fff transparent;
+ animation: connecting-spinner 1.2s linear infinite;
+}
+@keyframes connecting-spinner {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+
+.rtc-error {
+ position: absolute;
+ left: calc(50% - 68px);
+ top: calc(50% - 68px);
+
+
+ width: 130px;
+ height: 130px;
+}
+.rtc-error:after {
+ content: " ";
+ display: block;
+ width: 108px;
+ height: 108px;
+ margin: 8px;
+ border-radius: 50%;
+ border: 6px solid #f00;
+ animation: blinker 1s linear infinite;
+}
+
+@keyframes blinker {
+ 50% {
+ opacity: 0;
+ }
+}
let color = this.getColorByString(userName);
elementRemoteVideo.insertAdjacentHTML('beforeend', `
<div id="div-${userId}" class="video-container" style="border-color: ${color};">
+ <div class="connecting-spinner"></div>
+ <div class="rtc-error" style="display: none"></div>
<i style="background-color: ${color};">${userName}</i>
<img id="microphone-${userId}" src="resources/logos/microphone-close.svg">
<video id="${userId}" autoplay></video>
element.remove();
}
+ isConnecting(userId : string): void {
+ let connectingSpinnerDiv = this.getSpinner(userId);
+ if (connectingSpinnerDiv === null) {
+ return;
+ }
+ connectingSpinnerDiv.style.display = 'block';
+ }
+
+ isConnected(userId : string): void {
+ let connectingSpinnerDiv = this.getSpinner(userId);
+ if (connectingSpinnerDiv === null) {
+ return;
+ }
+ connectingSpinnerDiv.style.display = 'none';
+ }
+
+ isError(userId : string): void {
+ let element = document.getElementById(`div-${userId}`);
+ if(!element){
+ return;
+ }
+ let errorDiv = element.getElementsByClassName('rtc-error').item(0) as HTMLDivElement|null;
+ if (errorDiv === null) {
+ return;
+ }
+ errorDiv.style.display = 'block';
+ }
+
+ private getSpinner(userId : string): HTMLDivElement|null {
+ let element = document.getElementById(`div-${userId}`);
+ if(!element){
+ return null;
+ }
+ let connnectingSpinnerDiv = element.getElementsByClassName('connecting-spinner').item(0) as HTMLDivElement|null;
+ return connnectingSpinnerDiv;
+ }
+
/**
*
* @param str
peer.on('error', (err: any) => {
console.error(`error => ${user.userId} => ${err.code}`, err);
+ this.MediaManager.isError(user.userId);
});
peer.on('connect', () => {
+ this.MediaManager.isConnected(user.userId);
console.info(`connect => ${user.userId}`);
});