Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit 62aa2a3

Browse files
Merge pull request #12 from SuperViz/feat/grid-mode-on-realtime
feat: implement grid mode synced with realtime
2 parents cedaa70 + f2a69ec commit 62aa2a3

File tree

4 files changed

+34
-2
lines changed

4 files changed

+34
-2
lines changed

src/common/types/messages.types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ export enum MessageTypes {
1111
MEETING_JOIN = 'meeting.join',
1212
MEETING_USER_PROPERTIES = 'meeting.user-properties',
1313
MEETING_HOST_CHANGE = 'meeting.host-change',
14+
MEETING_GRID_MODE_CHANGE = 'meeting.grid-mode-change',
1415
REALTIME_USER_LIST_UPDATE = 'realtime.user-list-update',
1516
REALTIME_HOST_CHANGE = 'realtime.host-change',
17+
REALTIME_GRID_MODE_CHANGE = 'realtime.grid-mode-change',
1618

1719
HEARTBEAT = 'heartbeat',
1820
}

src/service/VideoConfereceManager.ts

+13
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export default class VideoConfereceManager {
1818
private frameStateObserver = new ObserverHelper({ logger });
1919
private meetingJoinObserver = new ObserverHelper({ logger });
2020
private hostChangeObserver = new ObserverHelper({ logger });
21+
private gridModeChangeObserver = new ObserverHelper({ logger });
2122

2223
frameState = VideoFrameStateType.UNINITIALIZED;
2324

@@ -69,6 +70,7 @@ export default class VideoConfereceManager {
6970
this.frameStateObserver.destroy();
7071
this.meetingJoinObserver.destroy();
7172
this.hostChangeObserver.destroy();
73+
this.gridModeChangeObserver.destroy();
7274

7375
this.bricklayer = null;
7476
this.frameState = null;
@@ -88,6 +90,7 @@ export default class VideoConfereceManager {
8890
this.messageBridge.listen(MessageTypes.FRAME_SIZE_UPDATE, this.updateFrameSize);
8991
this.messageBridge.listen(MessageTypes.MEETING_JOIN, this.meetingJoin);
9092
this.messageBridge.listen(MessageTypes.MEETING_HOST_CHANGE, this.onMeetingHostChange);
93+
this.messageBridge.listen(MessageTypes.MEETING_GRID_MODE_CHANGE, this.onGridModeChange);
9194

9295
this.updateFrameState(VideoFrameStateType.INITIALIZED);
9396
};
@@ -123,6 +126,14 @@ export default class VideoConfereceManager {
123126
this.hostChangeObserver.publish(hostId);
124127
};
125128

129+
private onGridModeChange = (isGridModeEnable) => {
130+
this.gridModeChangeObserver.publish(isGridModeEnable);
131+
};
132+
133+
gridModeDidChange(isGridModeEnable) {
134+
this.messageBridge.publish(MessageTypes.REALTIME_GRID_MODE_CHANGE, isGridModeEnable);
135+
}
136+
126137
actorsListDidChange(actorsList) {
127138
this.messageBridge.publish(MessageTypes.REALTIME_USER_LIST_UPDATE, actorsList);
128139
}
@@ -137,4 +148,6 @@ export default class VideoConfereceManager {
137148
unsubscribeFromMeetingJoin = this.meetingJoinObserver.unsubscribe;
138149
subscribeToHostChange = this.hostChangeObserver.subscribe;
139150
unsubscribeFromHostChange = this.hostChangeObserver.unsubscribe;
151+
subscribeToGridModeChange = this.gridModeChangeObserver.subscribe;
152+
unsubscribeFromGridModeChange = this.gridModeChangeObserver.unsubscribe;
140153
}

src/service/communicator/Communicator.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export default class Communicator {
4343
this.videoManager.subscribeToFrameState(this.onFrameStateDidChange);
4444
this.videoManager.subscribeToMeetingJoin(this.onMeetingJoin);
4545
this.videoManager.subscribeToHostChange(this.onHostDidChange);
46+
this.videoManager.subscribeToGridModeChange(this.onGridModeDidChange);
4647
this.realtime.subscribeToRoomInfoUpdated(this.onActorsListDidChange);
4748
this.realtime.subscribeToMasterActorUpdate(this.onMasterActorDidChange);
4849
}
@@ -76,6 +77,7 @@ export default class Communicator {
7677
this.videoManager.unsubscribeFromFrameState(this.onFrameStateDidChange);
7778
this.videoManager.unsubscribeFromMeetingJoin(this.onMeetingJoin);
7879
this.videoManager.unsubscribeFromHostChange(this.onHostDidChange);
80+
this.videoManager.unsubscribeFromGridModeChange(this.onGridModeDidChange);
7981
this.realtime.unsubscribeFromRoomInfoUpdated(this.onActorsListDidChange);
8082
this.realtime.unsubscribeFromMasterActorUpdate(this.onMasterActorDidChange);
8183
this.leave();
@@ -87,11 +89,16 @@ export default class Communicator {
8789
}
8890
};
8991

90-
onActorsListDidChange = (actorsList) => {
91-
this.videoManager.actorsListDidChange(actorsList._customProperties.slots);
92+
onActorsListDidChange = (room) => {
93+
this.videoManager.actorsListDidChange(room._customProperties.slots);
94+
this.videoManager.gridModeDidChange(room._customProperties.isGridModeEnable);
9295
};
9396

9497
onMasterActorDidChange = (masterActor) => {
9598
this.videoManager.onMasterActorDidChange(masterActor?.newMasterActorUserId);
9699
};
100+
101+
onGridModeDidChange = (isGridModeEnable) => {
102+
this.realtime.setGridMode(isGridModeEnable);
103+
};
97104
}

src/service/realtime/photon/PhotonRealtimeService.ts

+10
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ export default class PhotonRealtimeService {
340340
const roomProperties = {
341341
slots: Array(16).fill(null),
342342
userIdToSlotIndex: {},
343+
isGridModeEnable: false,
343344
};
344345

345346
roomProperties.slots[0] = {
@@ -557,6 +558,15 @@ export default class PhotonRealtimeService {
557558
this.realtimeStateObserver.publish(this.state, this.stateReason);
558559
}
559560

561+
setGridMode = (isGridModeEnable) => {
562+
const roomProperties = this.getRoomProperties;
563+
const newRoomProperties = {
564+
...roomProperties,
565+
isGridModeEnable,
566+
};
567+
this.updateRoomProperties(newRoomProperties);
568+
};
569+
560570
// Photon listeners
561571
onError = (errorCode, errorMessage) => {
562572
const photonErrorCodes = Photon.LoadBalancing.LoadBalancingClient.PeerErrorCode;

0 commit comments

Comments
 (0)