mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
added sockets listeners handlers & update debuggers
This commit is contained in:
parent
ecaed88419
commit
e71f8aa03b
@ -159,7 +159,7 @@ function createWindow() {
|
||||
];
|
||||
|
||||
tray.setContextMenu(Menu.buildFromTemplate(trayMenuTemplate))
|
||||
tray.setToolTip(packagejson.title)
|
||||
tray.setToolTip(app_config.siteName)
|
||||
tray.on('double-click', () => resumeApp())
|
||||
|
||||
mainWindow.loadURL(app_path)
|
||||
|
5
package-lock.json
generated
5
package-lock.json
generated
@ -14932,6 +14932,11 @@
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
|
||||
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
|
||||
},
|
||||
"howler": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/howler/-/howler-2.2.0.tgz",
|
||||
"integrity": "sha512-sGPkrAQy7jh5mNDbkRNG0F82R2HFDYNsQXBcX4smXQT0y0F4UMsa/+jXaGwWvcrajWr2tDB7JUkH7G5qSnuIyQ=="
|
||||
},
|
||||
"hpack.js": {
|
||||
"version": "2.1.6",
|
||||
"resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
|
||||
|
@ -57,6 +57,7 @@
|
||||
"enquire-js": "^0.2.1",
|
||||
"fast-json-stringify": "^2.2.9",
|
||||
"feather-reactjs": "^2.0.13",
|
||||
"howler": "^2.2.0",
|
||||
"html2canvas": "^1.0.0-rc.7",
|
||||
"jquery": "^3.5.1",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
|
@ -3,13 +3,14 @@ import verbosity from 'core/libs/verbosity'
|
||||
import settings from 'core/libs/settings'
|
||||
import { notify } from 'core/libs/appInterface'
|
||||
|
||||
export default class SocketConnection{
|
||||
export default class SocketConnection {
|
||||
ioConn: any
|
||||
state: { connAttemps: number; registeredNamespaces: any; }
|
||||
state: { connAttemps: number; registeredNamespaces: any; connectionState: any; listeners: any; }
|
||||
props: any
|
||||
opts: any
|
||||
dispatcher: any;
|
||||
|
||||
constructor(props:any){
|
||||
constructor(props: any) {
|
||||
if (!props) {
|
||||
throw new Error("Mmm some props are not defined")
|
||||
}
|
||||
@ -17,8 +18,10 @@ export default class SocketConnection{
|
||||
this.dispatcher = props.connector
|
||||
|
||||
this.state = {
|
||||
listeners: {},
|
||||
connectionState: "init",
|
||||
connAttemps: Number(0),
|
||||
registeredNamespaces: []
|
||||
registeredNamespaces: [],
|
||||
}
|
||||
|
||||
this.opts = {
|
||||
@ -62,21 +65,60 @@ export default class SocketConnection{
|
||||
extraHeaders: {},
|
||||
}
|
||||
|
||||
if (typeof(this.props) !== "undefined") {
|
||||
this.opts = { ...this.opts, ...this.props}
|
||||
if (typeof (this.props) !== "undefined") {
|
||||
this.opts = { ...this.opts, ...this.props }
|
||||
}
|
||||
|
||||
verbosity([`New socket connection, with parameters =>`, this.opts], { color: "blue" })
|
||||
this.ioConn = io(this.opts.hostname, this.opts)
|
||||
|
||||
|
||||
this.ioConn.on('connect', (event:any) => {
|
||||
this.ioConn.handleUpdateState = (payload) => {
|
||||
this.state = { ...this.state, ...payload }
|
||||
this.dispatcher({ type: "socket/updateState", payload: this.state })
|
||||
}
|
||||
this.ioConn.handleUpdateListener = (listenerKey, toState) => {
|
||||
if (!listenerKey)
|
||||
return false
|
||||
|
||||
const getInvert = () => {
|
||||
if (this.state.listeners[listenerKey] != null) {
|
||||
return !this.state.listeners[listenerKey]
|
||||
} else {
|
||||
return true // this set activated listener by default if not exist any entries
|
||||
}
|
||||
}
|
||||
let updatedObj = []
|
||||
updatedObj[listenerKey] = toState ?? getInvert()
|
||||
|
||||
let updatedState = this.state.listeners
|
||||
updatedState = { ...updatedState, ...updatedObj }
|
||||
|
||||
this.ioConn.handleUpdateState({ listeners: updatedState })
|
||||
}
|
||||
this.ioConn._emit = (...context) => {
|
||||
const listenerKey = context[0]
|
||||
if (typeof (this.state.listeners[listenerKey]) == "undefined") {
|
||||
this.ioConn.handleUpdateListener(listenerKey, true)
|
||||
}
|
||||
if (this.state.listeners[listenerKey] != null && !this.state.listeners[listenerKey]) {
|
||||
verbosity([`Listener [${listenerKey}] is broked!`])
|
||||
// setTimeout(() => {
|
||||
// this.ioConn.handleUpdateListener(listenerKey)
|
||||
// }, 1000)
|
||||
return false
|
||||
}
|
||||
|
||||
return this.ioConn.emit(...context)
|
||||
}
|
||||
|
||||
|
||||
this.ioConn.on('connect', (event: any) => {
|
||||
notify.success("You are now online")
|
||||
verbosity("Successfully connect")
|
||||
this.ioConn.handleUpdateState({ connectionState: "connected" })
|
||||
props.then(true) // this send an signal when the socket its successfully connected
|
||||
})
|
||||
|
||||
this.ioConn.on("connect_error", (event:any) => {
|
||||
|
||||
this.ioConn.on("connect_error", (event: any) => {
|
||||
if (this.state.connAttemps >= this.opts.reconnectionAttempts) {
|
||||
verbosity(['Maximun nº of attemps reached => max', this.opts.reconnectionAttempts + 1])
|
||||
this.ioConn.close()
|
||||
@ -86,34 +128,28 @@ export default class SocketConnection{
|
||||
this.state.connAttemps = this.state.connAttemps + 1
|
||||
})
|
||||
|
||||
this.ioConn.on('reconnect', (attemptNumber:number) => {
|
||||
verbosity(["Connection reconected with (", attemptNumber , ") tries"])
|
||||
this.ioConn.on('reconnect', (attemptNumber: number) => {
|
||||
verbosity(["Connection reconected with (", attemptNumber, ") tries"])
|
||||
notify.success("You are now online")
|
||||
})
|
||||
|
||||
this.ioConn.on('disconnected', () => {
|
||||
notify.warn("You are offline")
|
||||
this.ioConn.handleUpdateState({ connectionState: "connected" })
|
||||
})
|
||||
|
||||
this.ioConn.on('error', (event:any) => {
|
||||
this.ioConn.on('disconnected', () => {
|
||||
notify.warn("You are offline")
|
||||
this.ioConn.handleUpdateState({ connectionState: "disconnected" })
|
||||
})
|
||||
|
||||
this.ioConn.on('error', (event: any) => {
|
||||
notify.error(event)
|
||||
})
|
||||
|
||||
this.ioConn.on('close', () => {
|
||||
verbosity("Connection closed!")
|
||||
})
|
||||
|
||||
this.ioConn.on('updateState', (event:any) => {
|
||||
verbosity(["updating state > ", event])
|
||||
this.dispatcher({ type: "socket/updateState", payload: event })
|
||||
this.ioConn.handleUpdateState({ connectionState: "closed" })
|
||||
})
|
||||
|
||||
this.ioConn.on('pingPong', (e:any) => {
|
||||
// woops
|
||||
const n = e + 1
|
||||
const fart = new Audio("https://dl.ragestudio.net/pedo_cum.mp3")
|
||||
fart.play()
|
||||
setTimeout(() => { this.ioConn.emit("pingPong", n) }, n)
|
||||
this.ioConn.on('updateState', (event: any) => {
|
||||
this.ioConn.handleUpdateState(event)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ export default {
|
||||
|
||||
window.PluginGlobals = []
|
||||
window.Internal = []
|
||||
|
||||
|
||||
queryIndexer([
|
||||
{
|
||||
match: '/s;:id',
|
||||
@ -112,13 +112,13 @@ export default {
|
||||
], (callback) => {
|
||||
window.location = callback
|
||||
})
|
||||
|
||||
|
||||
if (!service) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (!sessionDataframe && session ) {
|
||||
if (!sessionDataframe && session) {
|
||||
yield put({ type: 'handleGetUserData' })
|
||||
}
|
||||
|
||||
@ -128,14 +128,17 @@ export default {
|
||||
const state = yield select(state => state)
|
||||
|
||||
verbosity([`Starting Auth process`])
|
||||
yield put({ type: 'socket/initializeSocket', payload: {
|
||||
hostname: state.app.socket_address,
|
||||
reconnectionAttempts: 10
|
||||
}, then: () => {
|
||||
//socket.socket_conn.emit("pingPong")
|
||||
}})
|
||||
yield put({
|
||||
type: 'socket/initializeSocket',
|
||||
payload: {
|
||||
hostname: state.app.socket_address,
|
||||
reconnectionAttempts: 10
|
||||
},
|
||||
then: () => {
|
||||
return console.log("recived")
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
@ -144,7 +147,7 @@ export default {
|
||||
const token = yield select(state => state.app.session_token)
|
||||
const sk = yield select(state => state.app.server_key)
|
||||
|
||||
session.deauth({ id: uuid, userToken: token, server_key: sk }, (err, res) =>{
|
||||
session.deauth({ id: uuid, userToken: token, server_key: sk }, (err, res) => {
|
||||
verbosity([res])
|
||||
})
|
||||
|
||||
@ -155,104 +158,104 @@ export default {
|
||||
const { user_id, access_token } = payload.authFrame
|
||||
yield put({ type: 'handleLogin', payload: { user_id, access_token, user_data: payload.dataFrame } })
|
||||
},
|
||||
*initializePlugins({ payload }, { select }){
|
||||
const extended = yield select(state => state.extended)
|
||||
*initializePlugins({ payload }, { select }) {
|
||||
const extended = yield select(state => state.extended)
|
||||
|
||||
if(!payload.array){
|
||||
verbosity("Only array map for initialize plugins","Please read SDK documentation for more info.")
|
||||
return false
|
||||
}
|
||||
try {
|
||||
usePlugins([payload.array], (err, results) => {
|
||||
if (err) {
|
||||
verbosity(["Init error!", err])
|
||||
appInterface.notify.error("Plugin initialize error!", err)
|
||||
return false
|
||||
}
|
||||
const rootInit = results[0]
|
||||
|
||||
if (!rootInit.uuid) {
|
||||
verbosity("Cannot initialize a plugin without UUID.","Please read SDK documentation for more info.")
|
||||
appInterface.notify.error("Cannot initialize a plugin without UUID.")
|
||||
if (!payload.array) {
|
||||
verbosity("Only array map for initialize plugins", "Please read SDK documentation for more info.")
|
||||
return false
|
||||
}
|
||||
try {
|
||||
usePlugins([payload.array], (err, results) => {
|
||||
if (err) {
|
||||
verbosity(["Init error!", err])
|
||||
appInterface.notify.error("Plugin initialize error!", err)
|
||||
return false
|
||||
}
|
||||
const rootInit = results[0]
|
||||
|
||||
if (!rootInit.uuid) {
|
||||
verbosity("Cannot initialize a plugin without UUID.", "Please read SDK documentation for more info.")
|
||||
appInterface.notify.error("Cannot initialize a plugin without UUID.")
|
||||
return false
|
||||
}
|
||||
|
||||
let plugin = {
|
||||
uuid: null,
|
||||
version: "n/a",
|
||||
title: "Blank"
|
||||
}
|
||||
plugin = { ...plugin, ...rootInit }
|
||||
|
||||
const rootClass = plugin.payload
|
||||
let extendedRequire = null
|
||||
|
||||
class extendedPlugin extends rootClass {
|
||||
constructor(props) {
|
||||
super(props)
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof (plugin.requireExtends) !== "undefined") {
|
||||
console.log("Extending class with => ", plugin.requireExtends)
|
||||
|
||||
plugin.requireExtends.forEach((e) => {
|
||||
const RequireFrom = e.from
|
||||
const RequireImport = e.import
|
||||
|
||||
const existScheme = typeof (RequireImport) !== "undefined" && typeof (RequireFrom) !== "undefined"
|
||||
if (!existScheme) {
|
||||
verbosity("Invalid require extension!")
|
||||
return false
|
||||
}
|
||||
|
||||
let plugin = {
|
||||
uuid: null,
|
||||
version: "n/a",
|
||||
title: "Blank"
|
||||
}
|
||||
plugin = {...plugin, ...rootInit}
|
||||
|
||||
const rootClass = plugin.payload
|
||||
let extendedRequire = null
|
||||
|
||||
class extendedPlugin extends rootClass{
|
||||
constructor(props){
|
||||
super(props)
|
||||
}
|
||||
}
|
||||
|
||||
if( typeof(plugin.requireExtends) !== "undefined" ) {
|
||||
console.log("Extending class with => ", plugin.requireExtends)
|
||||
|
||||
plugin.requireExtends.forEach((e) => {
|
||||
const RequireFrom = e.from
|
||||
const RequireImport = e.import
|
||||
|
||||
const existScheme = typeof(RequireImport) !== "undefined" && typeof(RequireFrom) !== "undefined"
|
||||
if(!existScheme){
|
||||
verbosity("Invalid require extension!")
|
||||
return false
|
||||
}
|
||||
|
||||
if (Array.isArray(RequireImport)) {
|
||||
RequireImport.forEach((e) => {
|
||||
`console`.log(`Importing " ${e} " from [ ${RequireFrom} ]`)
|
||||
extendedRequire[e] = require(RequireFrom)
|
||||
})
|
||||
}else{
|
||||
|
||||
}
|
||||
|
||||
if (Array.isArray(RequireImport)) {
|
||||
RequireImport.forEach((e) => {
|
||||
`console`.log(`Importing " ${e} " from [ ${RequireFrom} ]`)
|
||||
extendedRequire[e] = require(RequireFrom)
|
||||
})
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
window.PluginGlobals[plugin.uuid] = new extendedPlugin({ extended, extendedRequire })
|
||||
|
||||
appInterface.notify.open({
|
||||
message: `${plugin.title} v${plugin.version}`,
|
||||
description: `New plugin is now installed !`
|
||||
})
|
||||
})
|
||||
} catch (error) {
|
||||
verbosity("Unexpected catched exception! ", error)
|
||||
}
|
||||
|
||||
}
|
||||
window.PluginGlobals[plugin.uuid] = new extendedPlugin({ extended, extendedRequire })
|
||||
|
||||
appInterface.notify.open({
|
||||
message: `${plugin.title} v${plugin.version}`,
|
||||
description: `New plugin is now installed !`
|
||||
})
|
||||
})
|
||||
} catch (error) {
|
||||
verbosity("Unexpected catched exception! ", error)
|
||||
|
||||
}
|
||||
},
|
||||
*updateTheme({payload}, {put, select}){
|
||||
*updateTheme({ payload }, { put, select }) {
|
||||
if (!payload) return false
|
||||
let container = yield select(state => state.app.app_theme)
|
||||
let style_keys = []
|
||||
let tmp = []
|
||||
|
||||
container.forEach((e)=>{style_keys[e.key] = e.value})
|
||||
container.forEach((e) => { style_keys[e.key] = e.value })
|
||||
|
||||
if(!style_keys[payload.key]){
|
||||
tmp.push({key: payload.key, value: payload.value})
|
||||
if (!style_keys[payload.key]) {
|
||||
tmp.push({ key: payload.key, value: payload.value })
|
||||
}
|
||||
container.forEach((e) => {
|
||||
let obj = {}
|
||||
if(e.key === payload.key){
|
||||
if (e.key === payload.key) {
|
||||
obj = { key: payload.key, value: payload.value }
|
||||
}else{
|
||||
} else {
|
||||
obj = { key: e.key, value: e.value }
|
||||
}
|
||||
tmp.push(obj)
|
||||
})
|
||||
return tmp? yield put({ type: 'handleUpdateTheme', payload: tmp }) : null
|
||||
return tmp ? yield put({ type: 'handleUpdateTheme', payload: tmp }) : null
|
||||
},
|
||||
*updateFrames({payload}, { select, put }) {
|
||||
*updateFrames({ payload }, { select, put }) {
|
||||
try {
|
||||
const session = yield select(state => state.app.session_valid);
|
||||
let sessionAuthframe = cookie.get(app_config.session_token_storage)
|
||||
@ -292,12 +295,12 @@ export default {
|
||||
handleUpdateAuthFrames(state, { payload }) {
|
||||
state.session_authframe = payload
|
||||
state.session_token = payload.session_token,
|
||||
state.session_uuid = payload.session_uuid
|
||||
state.session_uuid = payload.session_uuid
|
||||
},
|
||||
handleUpdateDataFrames(state, { payload }) {
|
||||
state.session_data = payload
|
||||
},
|
||||
handleValidate(state){
|
||||
handleValidate(state) {
|
||||
if (state.session_authframe) {
|
||||
if (settings("session_noexpire")) {
|
||||
state.session_valid = true
|
||||
@ -308,19 +311,18 @@ export default {
|
||||
const now = new Date().getTime()
|
||||
|
||||
verbosity(
|
||||
`TOKEN EXP => ${tokenExp} ${
|
||||
settings("session_noexpire") ? '( Infinite )' : `( ${tokenExpLocale} )`
|
||||
`TOKEN EXP => ${tokenExp} ${settings("session_noexpire") ? '( Infinite )' : `( ${tokenExpLocale} )`
|
||||
} || NOW => ${now}`
|
||||
)
|
||||
|
||||
if (tokenExp < now) {
|
||||
state.session_valid = false
|
||||
}else{
|
||||
} else {
|
||||
state.session_valid = true
|
||||
}
|
||||
}
|
||||
},
|
||||
handleLogin(state, { payload }){
|
||||
handleLogin(state, { payload }) {
|
||||
if (!payload) return false
|
||||
|
||||
state.session_token = payload.access_token
|
||||
@ -339,7 +341,7 @@ export default {
|
||||
isDev: sessionData.dev,
|
||||
isPro: sessionData.is_pro
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
jwt.sign(frame, state.server_key, (err, token) => {
|
||||
@ -355,27 +357,27 @@ export default {
|
||||
state.session_valid = true
|
||||
location.reload()
|
||||
},
|
||||
handleGetUserData(state){
|
||||
handleGetUserData(state) {
|
||||
const frame = {
|
||||
id: state.session_uuid,
|
||||
access_token: state.session_token,
|
||||
serverKey: state.server_key
|
||||
}
|
||||
user.get.data(frame, (err, res) => {
|
||||
if(err) {
|
||||
verbosity([err])
|
||||
}
|
||||
if (res) {
|
||||
try {
|
||||
const session_data = JSON.stringify(res.response)
|
||||
sessionStorage.setItem(app_config.session_data_storage, btoa(session_data))
|
||||
} catch (error) {
|
||||
verbosity([error])
|
||||
}
|
||||
if (err) {
|
||||
verbosity([err])
|
||||
}
|
||||
if (res) {
|
||||
try {
|
||||
const session_data = JSON.stringify(res.response)
|
||||
sessionStorage.setItem(app_config.session_data_storage, btoa(session_data))
|
||||
} catch (error) {
|
||||
verbosity([error])
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
handleCollapseSidebar(state, { payload }){
|
||||
handleCollapseSidebar(state, { payload }) {
|
||||
state.sidebar_collapsed = payload
|
||||
},
|
||||
handleUpdateTheme(state, { payload }) {
|
||||
@ -383,40 +385,40 @@ export default {
|
||||
store.set(app_config.appTheme_container, payload);
|
||||
state.app_theme = payload
|
||||
},
|
||||
requireQuery(state, { payload, callback }){
|
||||
if(!payload || !callback) return false
|
||||
requireQuery(state, { payload, callback }) {
|
||||
if (!payload || !callback) return false
|
||||
switch (payload) {
|
||||
case 'login':{
|
||||
case 'login': {
|
||||
callback(state.session_valid)
|
||||
break;
|
||||
}
|
||||
case 'guest':{
|
||||
case 'guest': {
|
||||
callback(!state.session_valid)
|
||||
break;
|
||||
}
|
||||
case 'dev':{
|
||||
if(state.session_data){
|
||||
return callback(state.session_data.dev? true : false)
|
||||
case 'dev': {
|
||||
if (state.session_data) {
|
||||
return callback(state.session_data.dev ? true : false)
|
||||
}
|
||||
return callback(false)
|
||||
}
|
||||
case 'embedded':{
|
||||
callback(state.electron? true : false)
|
||||
case 'embedded': {
|
||||
callback(state.electron ? true : false)
|
||||
break;
|
||||
}
|
||||
default:{
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
ipcInvoke(state, {payload}){
|
||||
ipcInvoke(state, { payload }) {
|
||||
if (!payload || !state.embedded) {
|
||||
return false
|
||||
}
|
||||
const ipc = state.electron.ipcRenderer
|
||||
ipc.invoke(payload.key, payload.payload)
|
||||
},
|
||||
ipcSend(state, {payload}){
|
||||
ipcSend(state, { payload }) {
|
||||
if (!payload || !state.embedded) {
|
||||
return false
|
||||
}
|
||||
|
@ -5,45 +5,99 @@ import { user, session } from 'core/models'
|
||||
import { router, verbosity, appInterface } from 'core/libs'
|
||||
import settings from 'core/libs/settings'
|
||||
import { __legacy__objectToArray } from 'core'
|
||||
import { Howl, Howler } from 'howler'
|
||||
|
||||
import SocketConnection from 'core/libs/socket/index.ts'
|
||||
|
||||
import jwt from 'jsonwebtoken'
|
||||
import cookie from 'cookie_js'
|
||||
|
||||
const defaultSocketAddress = "localhost:7000"
|
||||
|
||||
export default {
|
||||
namespace: 'socket',
|
||||
state: {
|
||||
resolvers: null,
|
||||
ioConn: null
|
||||
ioConn: null,
|
||||
listeners: {}
|
||||
},
|
||||
subscriptions: {
|
||||
setup({ dispatch }) {
|
||||
dispatch({ type: 'query' })
|
||||
dispatch({ type: 'query' })
|
||||
},
|
||||
},
|
||||
effects: {
|
||||
*query({ payload }, { call, put, select }) {
|
||||
const state = yield select(state => state)
|
||||
|
||||
yield put({ type: "updateState", payload: { resolvers: state.app.resolvers } })
|
||||
const state = yield select(state => state)
|
||||
|
||||
yield put({ type: "updateState", payload: { resolvers: state.app.resolvers } })
|
||||
|
||||
},
|
||||
*initializeSocket({payload, then}, {select, put}){
|
||||
if(!payload) return false
|
||||
const state = yield select(state => state)
|
||||
const handleThen = () => {
|
||||
if (typeof(then) !== "undefined") {
|
||||
then(true)
|
||||
}
|
||||
}
|
||||
*initializeSocket({ payload, then }, { select, put }) {
|
||||
if (!payload) return false
|
||||
const state = yield select(state => state)
|
||||
|
||||
const handleThen = () => {
|
||||
if (typeof (then) !== "undefined") {
|
||||
console.log("then callback activated")
|
||||
return then(true)
|
||||
}
|
||||
}
|
||||
|
||||
yield put({
|
||||
type: "handleSocket",
|
||||
payload: new SocketConnection({ payload, connector: state.app.dispatcher, then: handleThen })
|
||||
})
|
||||
},
|
||||
*break({ listener }, { select, put }) {
|
||||
const state = yield select(state => state.socket)
|
||||
state.ioConn.handleUpdateListener(listener, false)
|
||||
},
|
||||
*resume({ listener }, { select, put }) {
|
||||
const state = yield select(state => state.socket)
|
||||
state.ioConn.handleUpdateListener(listener, true)
|
||||
},
|
||||
*toogleListener({ listener }, { select, put }) {
|
||||
const state = yield select(state => state.socket)
|
||||
state.ioConn.handleUpdateListener(listener)
|
||||
},
|
||||
*floodTest({ ticks, offset }, { call, put, select }) {
|
||||
const state = yield select(state => state)
|
||||
|
||||
if (ticks == null) {
|
||||
ticks = 300
|
||||
}
|
||||
|
||||
const tickSound = new Howl({
|
||||
preload: true,
|
||||
html5: true,
|
||||
src: ["https://dl.ragestudio.net/tick.wav"]
|
||||
})
|
||||
|
||||
const endSound = new Howl({
|
||||
preload: true,
|
||||
html5: true,
|
||||
src: ["https://dl.ragestudio.net/tickUp.wav"]
|
||||
})
|
||||
|
||||
state.socket.ioConn._emit("floodTest", offset ?? Number(0)) // start flood
|
||||
|
||||
state.socket.ioConn.on('floodTest', (e: any) => {
|
||||
const n = e + 1
|
||||
const canTick = n < (ticks + 1)
|
||||
|
||||
verbosity([`floodTest (recived)=> ${e} | sending => ${n}`])
|
||||
if (canTick) {
|
||||
setTimeout(() => {
|
||||
state.socket.ioConn._emit("floodTest", n)
|
||||
tickSound.play()
|
||||
}, n)
|
||||
}else{
|
||||
endSound.play()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
yield put({
|
||||
type: "handleSocket",
|
||||
payload: new SocketConnection({payload, connector: state.app.dispatcher, then: handleThen })
|
||||
})
|
||||
},
|
||||
},
|
||||
reducers: {
|
||||
@ -54,8 +108,7 @@ export default {
|
||||
};
|
||||
},
|
||||
handleSocket(state, { payload }) {
|
||||
console.log(payload.ioConn)
|
||||
state.ioConn = payload.ioConn
|
||||
state.ioConn = payload.ioConn
|
||||
},
|
||||
},
|
||||
};
|
||||
|
@ -1,15 +1,23 @@
|
||||
import React from 'react'
|
||||
import ReduxDebugger from 'debuggers/redux'
|
||||
import { FloatComponent } from 'components'
|
||||
import { connect } from 'umi'
|
||||
@connect((store) => (store))
|
||||
export default class Index extends React.Component {
|
||||
handleOpenFloat() {
|
||||
FloatComponent({ children: <ReduxDebugger {...this.props} />, title: "redux debugger" })
|
||||
}
|
||||
render() {
|
||||
const dispatch = this.props.dispatch
|
||||
|
||||
return (
|
||||
<div>
|
||||
<button onClick={() => this.handleOpenFloat()}> open on float </button>
|
||||
<ReduxDebugger />
|
||||
<button onClick={() => dispatch({type: "socket/floodTest", ticks: 100 })}> start floodTest </button>
|
||||
<button onClick={() => dispatch({type: "socket/toogleListener", listener: "floodTest" })}> break floodTest </button>
|
||||
<button onClick={() => dispatch({type: "socket/break", listener: "floodTest" })}> fullbreak </button>
|
||||
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user