feat: message copying
This commit is contained in:
parent
e400ab0113
commit
2fb84959f4
|
@ -4,7 +4,7 @@ import React, {useRef, useState} from 'react';
|
|||
import {useDispatch, useSelector} from 'react-redux';
|
||||
import {v4 as uuidv4} from 'uuid';
|
||||
|
||||
import {addMessage} from '~/common/state/chat';
|
||||
import {submitMessage} from '~/common/state/chat';
|
||||
import {userSelector} from '~/common/state/user';
|
||||
|
||||
import useChannel from '~/client/hooks/useChannel';
|
||||
|
@ -22,7 +22,7 @@ export default function ChatSubmitMessage() {
|
|||
event.preventDefault();
|
||||
const message = text.slice(0, 1000).trim();
|
||||
if (message) {
|
||||
dispatch(addMessage({
|
||||
dispatch(submitMessage({
|
||||
channel,
|
||||
message,
|
||||
owner: user.id,
|
||||
|
|
|
@ -1,11 +1,20 @@
|
|||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import {useDispatch} from 'react-redux';
|
||||
|
||||
import Message from '~/common/packets/message.packet';
|
||||
import {addMessage} from '~/common/state/chat';
|
||||
|
||||
import useSocket from './hooks/useSocket';
|
||||
|
||||
export default function Dispatcher({children}) {
|
||||
const dispatch = useDispatch();
|
||||
useSocket((socket) => {
|
||||
const onPacket = () => {};
|
||||
const onPacket = (packet) => {
|
||||
if (packet instanceof Message) {
|
||||
dispatch(addMessage(packet.data));
|
||||
}
|
||||
};
|
||||
socket.on('packet', onPacket);
|
||||
socket.on('disconnect', () => socket.off('packet', onPacket));
|
||||
socket.on('reconnect', () => socket.on('packet', onPacket));
|
||||
|
|
5
src/client/store/effects.js
vendored
5
src/client/store/effects.js
vendored
|
@ -1,10 +1,11 @@
|
|||
import Message from '~/common/packets/message.packet';
|
||||
import {addMessage, confirmMessage} from '~/common/state/chat';
|
||||
import {addMessage, confirmMessage, submitMessage} from '~/common/state/chat';
|
||||
|
||||
import {socket} from '~/client/hooks/useSocket';
|
||||
|
||||
const effects = {
|
||||
[addMessage]: ({dispatch}, {payload}) => {
|
||||
[submitMessage]: ({dispatch}, {payload}) => {
|
||||
dispatch(addMessage(payload));
|
||||
socket.send(new Message(payload), ([timestamp, current]) => {
|
||||
dispatch(confirmMessage({current, previous: payload.uuid, timestamp}));
|
||||
});
|
||||
|
|
|
@ -8,6 +8,9 @@ export default class Message extends Packet {
|
|||
data: {
|
||||
channel: 'string',
|
||||
message: 'string',
|
||||
owner: 'uint32',
|
||||
timestamp: 'float64',
|
||||
uuid: 'string',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@ const slice = createSlice({
|
|||
removeRecent: ({recent}, {payload: {channel}}) => {
|
||||
recent.splice(recent.indexOf(channel), 1);
|
||||
},
|
||||
submitMessage: () => {},
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -99,6 +100,7 @@ export const {
|
|||
left,
|
||||
removeMessage,
|
||||
removeRecent,
|
||||
submitMessage,
|
||||
} = slice.actions;
|
||||
|
||||
export default slice.reducer;
|
||||
|
|
|
@ -59,6 +59,12 @@ export function createSocketServer(httpServer) {
|
|||
const timestamp = Date.now();
|
||||
const uuid = uuidv4();
|
||||
const key = `${channel}:messages:${uuid}`;
|
||||
socket.to(channel, new Message({
|
||||
...packet.data,
|
||||
owner,
|
||||
timestamp,
|
||||
uuid,
|
||||
}));
|
||||
pubClient
|
||||
.multi()
|
||||
.set(key, JSON.stringify({
|
||||
|
|
Loading…
Reference in New Issue
Block a user