18 changed files with 154 additions and 40 deletions
@ -0,0 +1,26 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
module.exports = async function factory (app, opts) { |
||||
|
|
||||
|
app.socket.on('connection', async (socket) => { |
||||
|
console.info('WEB_SOCKET ' + socket.handshake.query.token + ' 已连接'); |
||||
|
|
||||
|
socket.on('disconnecting', async (reason) => { |
||||
|
console.info('WEB_SOCKET ' + socket.handshake.query.token + ' 已断开连接:' + reason); |
||||
|
}) |
||||
|
}) |
||||
|
|
||||
|
// 使用测试
|
||||
|
// setInterval(async () => {
|
||||
|
// const { connected } = app.socket.sockets
|
||||
|
// const roomId = 'ROOM_' + Math.random()
|
||||
|
// if (connected) {
|
||||
|
// for (let c in connected) {
|
||||
|
// connected[c].join(roomId)
|
||||
|
// }
|
||||
|
// app.socket.to(roomId).emit('TEST', { someProperty: `【星域 ROOM:${roomId}】呼叫自然选择号!!!`, })
|
||||
|
// }
|
||||
|
|
||||
|
// app.socket.emit('TEST', { someProperty: '【广播】呼叫青铜时代号!!!', })
|
||||
|
// }, 1000)
|
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
import * as global from './global' |
||||
|
import * as socket from './webSocket'; |
||||
|
|
||||
|
export default { |
||||
|
...global, |
||||
|
...socket, |
||||
|
}; |
@ -0,0 +1,31 @@ |
|||||
|
'use strict'; |
||||
|
import io from 'socket.io-client'; |
||||
|
|
||||
|
export const INIT_WEB_SOCKET = 'INIT_WEB_SOCKET' |
||||
|
export function initWebSocket ({ ioUrl, token }) { |
||||
|
if (!ioUrl) { |
||||
|
ioUrl = localStorage.getItem('apiRoot') |
||||
|
} |
||||
|
if (!token) { |
||||
|
const user = sessionStorage.getItem('user') |
||||
|
token = JSON.parse(user).token |
||||
|
} |
||||
|
if (!ioUrl || !token) { |
||||
|
return { |
||||
|
type: '', |
||||
|
} |
||||
|
} |
||||
|
return dispatch => { |
||||
|
const socket = io(ioUrl, { |
||||
|
query: { |
||||
|
token: token |
||||
|
} |
||||
|
}); |
||||
|
dispatch({ |
||||
|
type: INIT_WEB_SOCKET, |
||||
|
payload: { |
||||
|
socket: socket |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
'use strict'; |
||||
|
import * as actionTypes from '../actions/webSocket'; |
||||
|
import Immutable from 'immutable'; |
||||
|
|
||||
|
const initState = { |
||||
|
socket: null, |
||||
|
}; |
||||
|
|
||||
|
function webSocket (state = initState, action) { |
||||
|
const payload = action.payload; |
||||
|
switch (action.type) { |
||||
|
case actionTypes.INIT_WEB_SOCKET: |
||||
|
return Immutable.fromJS(state).merge({ |
||||
|
socket: payload.socket, |
||||
|
}).toJS(); |
||||
|
default: |
||||
|
return state; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default webSocket; |
Loading…
Reference in new issue