kasunk99-livestream-core 0.2.9 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -25,6 +25,7 @@ export type HostChatMessage = {
|
|
|
25
25
|
export type UseHostSocketReturn = HostState & {
|
|
26
26
|
chatMessages: HostChatMessage[];
|
|
27
27
|
setDisplayName: (name: string) => void;
|
|
28
|
+
sendChatMessage: (text: string) => void;
|
|
28
29
|
startPreview: () => Promise<void>;
|
|
29
30
|
stopPreview: () => void;
|
|
30
31
|
startLive: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHostSocket.d.ts","sourceRoot":"","sources":["../../src/hooks/useHostSocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAoB3B,MAAM,MAAM,oBAAoB,GAAG;IACjC,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAC5C,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC,CAAC;AAMF,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,
|
|
1
|
+
{"version":3,"file":"useHostSocket.d.ts","sourceRoot":"","sources":["../../src/hooks/useHostSocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAoB3B,MAAM,MAAM,oBAAoB,GAAG;IACjC,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAC5C,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC,CAAC;AAMF,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,CA4nBrF"}
|
|
@@ -172,6 +172,31 @@ export function useHostSocket(options = {}) {
|
|
|
172
172
|
const onIceServers = (servers) => {
|
|
173
173
|
hostSession.iceServers = Array.isArray(servers) ? servers : [];
|
|
174
174
|
};
|
|
175
|
+
socket.on('connect', onConnect);
|
|
176
|
+
socket.on('connect_error', onConnectError);
|
|
177
|
+
socket.on('disconnect', onDisconnect);
|
|
178
|
+
socket.on('ice-servers', onIceServers);
|
|
179
|
+
return () => {
|
|
180
|
+
socket.off('connect', onConnect);
|
|
181
|
+
socket.off('connect_error', onConnectError);
|
|
182
|
+
socket.off('disconnect', onDisconnect);
|
|
183
|
+
socket.off('ice-servers', onIceServers);
|
|
184
|
+
};
|
|
185
|
+
}, [fullCleanup]);
|
|
186
|
+
// ── Chat subscription ──────────────────────────────────────────────────────
|
|
187
|
+
// Registered on a separate effect keyed to live state so it is guaranteed to
|
|
188
|
+
// be active only while the host is in the room (socket.join runs as part of
|
|
189
|
+
// startLive). Registering it in the socket setup effect is too early — the host
|
|
190
|
+
// has not joined the room yet, and reconnects after navigate-away clear the
|
|
191
|
+
// room membership, so we need to re-register on every live transition.
|
|
192
|
+
useEffect(() => {
|
|
193
|
+
if (!state.live) {
|
|
194
|
+
setChatMessages([]);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const socket = hostSession.socket;
|
|
198
|
+
if (!socket)
|
|
199
|
+
return;
|
|
175
200
|
const onChatMessage = (msg) => {
|
|
176
201
|
if (!msg || typeof msg !== 'object')
|
|
177
202
|
return;
|
|
@@ -184,19 +209,10 @@ export function useHostSocket(options = {}) {
|
|
|
184
209
|
const id = `${String(m.peerId ?? 'p')}-${timestamp}-${text.slice(0, 6)}`;
|
|
185
210
|
setChatMessages((prev) => [...prev.slice(-99), { id, displayName, text, timestamp }]);
|
|
186
211
|
};
|
|
187
|
-
socket.on('connect', onConnect);
|
|
188
|
-
socket.on('connect_error', onConnectError);
|
|
189
|
-
socket.on('disconnect', onDisconnect);
|
|
190
|
-
socket.on('ice-servers', onIceServers);
|
|
191
212
|
socket.on('chat-message', onChatMessage);
|
|
192
|
-
return () => {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
socket.off('disconnect', onDisconnect);
|
|
196
|
-
socket.off('ice-servers', onIceServers);
|
|
197
|
-
socket.off('chat-message', onChatMessage);
|
|
198
|
-
};
|
|
199
|
-
}, [fullCleanup]);
|
|
213
|
+
return () => { socket.off('chat-message', onChatMessage); };
|
|
214
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
215
|
+
}, [state.live]);
|
|
200
216
|
// ── Permissions ────────────────────────────────────────────────────────────
|
|
201
217
|
const requestCameraMicPermissions = useCallback(async () => {
|
|
202
218
|
if (Platform.OS !== 'android')
|
|
@@ -561,10 +577,17 @@ export function useHostSocket(options = {}) {
|
|
|
561
577
|
const setDisplayName = useCallback((name) => {
|
|
562
578
|
patchHostState({ displayName: name });
|
|
563
579
|
}, []);
|
|
580
|
+
const sendChatMessage = useCallback((text) => {
|
|
581
|
+
const trimmed = text.trim();
|
|
582
|
+
if (!trimmed || !hostSession.socket?.connected)
|
|
583
|
+
return;
|
|
584
|
+
hostSession.socket.emit('chat-message', { text: trimmed });
|
|
585
|
+
}, []);
|
|
564
586
|
return {
|
|
565
587
|
...state,
|
|
566
588
|
chatMessages,
|
|
567
589
|
setDisplayName,
|
|
590
|
+
sendChatMessage,
|
|
568
591
|
startPreview,
|
|
569
592
|
stopPreview,
|
|
570
593
|
startLive,
|
package/package.json
CHANGED