feat: socket-worker
This commit is contained in:
parent
ffad67ca44
commit
284f67279b
|
@ -7,7 +7,7 @@ import {Stage} from '@avocado/graphics';
|
||||||
import {ActionRegistry, InputPacket} from '@avocado/input';
|
import {ActionRegistry, InputPacket} from '@avocado/input';
|
||||||
import {Vector} from '@avocado/math';
|
import {Vector} from '@avocado/math';
|
||||||
import {EventEmitter, Property} from '@avocado/mixins';
|
import {EventEmitter, Property} from '@avocado/mixins';
|
||||||
import {SocketClient} from '@avocado/net/client/socket';
|
import {SocketClient} from '@avocado/net/client/socket-worker';
|
||||||
import {SocketIoParser} from '@avocado/net';
|
import {SocketIoParser} from '@avocado/net';
|
||||||
import {
|
import {
|
||||||
StateKeysPacket,
|
StateKeysPacket,
|
||||||
|
@ -93,7 +93,7 @@ export class App extends decorate(class {}) {
|
||||||
this.pointingAt = [-1, -1];
|
this.pointingAt = [-1, -1];
|
||||||
this.pointerMovementHandle = undefined;
|
this.pointerMovementHandle = undefined;
|
||||||
// Net.
|
// Net.
|
||||||
this.AugmentedParser = augmentParserWithThroughput(SocketIoParser);
|
// this.AugmentedParser = augmentParserWithThroughput(SocketIoParser);
|
||||||
this.hasReceivedState = false;
|
this.hasReceivedState = false;
|
||||||
this.isConnected = false;
|
this.isConnected = false;
|
||||||
this.socket = undefined;
|
this.socket = undefined;
|
||||||
|
@ -167,7 +167,7 @@ export class App extends decorate(class {}) {
|
||||||
connect() {
|
connect() {
|
||||||
const config = this.readConfig();
|
const config = this.readConfig();
|
||||||
this.socket = new SocketClient(config.connectionUrl, {
|
this.socket = new SocketClient(config.connectionUrl, {
|
||||||
parser: this.AugmentedParser,
|
// parser: this.AugmentedParser,
|
||||||
});
|
});
|
||||||
this.socket.on('connect', () => {
|
this.socket.on('connect', () => {
|
||||||
this.removeFromDom(document.querySelector('.app'));
|
this.removeFromDom(document.querySelector('.app'));
|
||||||
|
@ -428,7 +428,7 @@ export class App extends decorate(class {}) {
|
||||||
const DebugUiComponent = <DebugUi
|
const DebugUiComponent = <DebugUi
|
||||||
actionRegistry={this.actionRegistry}
|
actionRegistry={this.actionRegistry}
|
||||||
app={this}
|
app={this}
|
||||||
Parser={this.AugmentedParser}
|
// Parser={this.AugmentedParser}
|
||||||
socket={this.socket}
|
socket={this.socket}
|
||||||
stage={this.stage}
|
stage={this.stage}
|
||||||
/>;
|
/>;
|
||||||
|
|
|
@ -8,7 +8,6 @@ import contempo from 'contempo';
|
||||||
// 1st party.
|
// 1st party.
|
||||||
import {usePropertyChange} from '../hooks/use-property-change';
|
import {usePropertyChange} from '../hooks/use-property-change';
|
||||||
import SelfEntity from './self-entity';
|
import SelfEntity from './self-entity';
|
||||||
import Connection from './connection';
|
|
||||||
import Timers from './timers';
|
import Timers from './timers';
|
||||||
|
|
||||||
const decorate = compose(
|
const decorate = compose(
|
||||||
|
@ -17,11 +16,7 @@ const decorate = compose(
|
||||||
);
|
);
|
||||||
|
|
||||||
const DebugUi = ({
|
const DebugUi = ({
|
||||||
actionRegistry,
|
|
||||||
app,
|
app,
|
||||||
socket,
|
|
||||||
stage,
|
|
||||||
Parser,
|
|
||||||
}) => {
|
}) => {
|
||||||
const [size, setSize] = useState([0, 0]);
|
const [size, setSize] = useState([0, 0]);
|
||||||
const [position, setPosition] = useState([0, 0]);
|
const [position, setPosition] = useState([0, 0]);
|
||||||
|
@ -30,20 +25,20 @@ const DebugUi = ({
|
||||||
// Sync debug UI size with stage size.
|
// Sync debug UI size with stage size.
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const onStageResized = (size) => {
|
const onStageResized = (size) => {
|
||||||
const rect = stage.element.getBoundingClientRect();
|
const rect = app.stage.element.getBoundingClientRect();
|
||||||
setPosition([rect.left, rect.top]);
|
setPosition([rect.left, rect.top]);
|
||||||
setSize(size);
|
setSize(size);
|
||||||
setTransformRatio(stage.transformRatio);
|
setTransformRatio(app.stage.transformRatio);
|
||||||
};
|
};
|
||||||
stage.on('displaySizeChanged', onStageResized);
|
app.stage.on('displaySizeChanged', onStageResized);
|
||||||
onStageResized(stage.displaySize);
|
onStageResized(app.stage.displaySize);
|
||||||
return () => {
|
return () => {
|
||||||
stage.off('displaySizeChanged', onStageResized);
|
app.stage.off('displaySizeChanged', onStageResized);
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
// Scale stage when debugging.
|
// Scale stage when debugging.
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
stage.element.style.transform = `scale(${isDebugging ? '0.5' : '1'})`;
|
app.stage.element.style.transform = `scale(${isDebugging ? '0.5' : '1'})`;
|
||||||
}, [isDebugging]);
|
}, [isDebugging]);
|
||||||
return isDebugging && <div
|
return isDebugging && <div
|
||||||
className="debug"
|
className="debug"
|
||||||
|
@ -61,11 +56,10 @@ const DebugUi = ({
|
||||||
style={{
|
style={{
|
||||||
transform: `scale(${1 / transformRatio})`,
|
transform: `scale(${1 / transformRatio})`,
|
||||||
transformOrigin: '0 0',
|
transformOrigin: '0 0',
|
||||||
width: stage.size[0],
|
width: app.stage.size[0],
|
||||||
height: stage.size[1],
|
height: app.stage.size[1],
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Connection Parser={Parser} socket={socket} />
|
|
||||||
<Timers app={app} />
|
<Timers app={app} />
|
||||||
<SelfEntity app={app} />
|
<SelfEntity app={app} />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,7 +3,7 @@ import http from 'http';
|
||||||
// 2nd party.
|
// 2nd party.
|
||||||
import {SocketServer} from '@avocado/net/server/socket';
|
import {SocketServer} from '@avocado/net/server/socket';
|
||||||
// Import directly for HMR hierarchy.
|
// Import directly for HMR hierarchy.
|
||||||
import '../register-traits';
|
import 'register-traits';
|
||||||
// Start game server.
|
// Start game server.
|
||||||
import Game from './game';
|
import Game from './game';
|
||||||
const socketServer = new SocketServer();
|
const socketServer = new SocketServer();
|
||||||
|
@ -35,7 +35,7 @@ createGame();
|
||||||
if (module.hot) {
|
if (module.hot) {
|
||||||
module.hot.accept([
|
module.hot.accept([
|
||||||
'./game',
|
'./game',
|
||||||
'../register-traits'
|
'register-traits'
|
||||||
], () => {
|
], () => {
|
||||||
destroyGame(() => {
|
destroyGame(() => {
|
||||||
createGame();
|
createGame();
|
||||||
|
|
|
@ -8,8 +8,8 @@ const config = require('./webpack.common.config');
|
||||||
config.entry = {
|
config.entry = {
|
||||||
client: [
|
client: [
|
||||||
'@babel/polyfill',
|
'@babel/polyfill',
|
||||||
path.join(__dirname, 'register-packets.js'),
|
'register-packets',
|
||||||
path.join(__dirname, 'register-traits.js'),
|
'register-traits',
|
||||||
'@avocado/behavior/item/initialize',
|
'@avocado/behavior/item/initialize',
|
||||||
path.join(__dirname, 'client', 'index.js'),
|
path.join(__dirname, 'client', 'index.js'),
|
||||||
],
|
],
|
||||||
|
|
|
@ -16,7 +16,7 @@ const config = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /register-packets\.js/,
|
test: /register-packets\.js$/,
|
||||||
use: {
|
use: {
|
||||||
loader: './defgen',
|
loader: './defgen',
|
||||||
options: {
|
options: {
|
||||||
|
@ -35,7 +35,7 @@ const config = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /register-traits\.js/,
|
test: /register-traits\.js$/,
|
||||||
use: {
|
use: {
|
||||||
loader: './defgen',
|
loader: './defgen',
|
||||||
options: {
|
options: {
|
||||||
|
@ -53,11 +53,16 @@ const config = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
|
globalObject: `(typeof self === 'undefined' ? this : self)`,
|
||||||
path: path.resolve(__dirname, 'dist'),
|
path: path.resolve(__dirname, 'dist'),
|
||||||
filename: '[name].js',
|
filename: '[name].js',
|
||||||
},
|
},
|
||||||
plugins: [],
|
plugins: [],
|
||||||
resolve: {
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'register-packets': path.resolve(__dirname, 'register-packets'),
|
||||||
|
'register-traits': path.resolve(__dirname, 'register-traits'),
|
||||||
|
},
|
||||||
modules: [path.resolve(__dirname, 'node_modules')],
|
modules: [path.resolve(__dirname, 'node_modules')],
|
||||||
},
|
},
|
||||||
resolveLoader: {
|
resolveLoader: {
|
||||||
|
|
21
yarn.lock
21
yarn.lock
|
@ -71,8 +71,8 @@
|
||||||
"@avocado/core" "1.x"
|
"@avocado/core" "1.x"
|
||||||
|
|
||||||
"@avocado/net@^1.0.0":
|
"@avocado/net@^1.0.0":
|
||||||
version "1.0.0"
|
version "1.0.1"
|
||||||
resolved "https://npm.i12e.cha0s.io/@avocado%2fnet/-/net-1.0.0.tgz#dc6b1bb090e52728fcd31233bcbbef78f42ed8c0"
|
resolved "https://npm.i12e.cha0s.io/@avocado%2fnet/-/net-1.0.1.tgz#43d8eb5f567bea704bcaed88acd6fed7643a5338"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@avocado/core" "1.x"
|
"@avocado/core" "1.x"
|
||||||
"@avocado/mixins" "1.x"
|
"@avocado/mixins" "1.x"
|
||||||
|
@ -80,6 +80,7 @@
|
||||||
schemapack "1.4.2"
|
schemapack "1.4.2"
|
||||||
socket.io "2.2.0"
|
socket.io "2.2.0"
|
||||||
socket.io-client "2.2.0"
|
socket.io-client "2.2.0"
|
||||||
|
worker-loader "2.0.0"
|
||||||
|
|
||||||
"@avocado/physics@1.x":
|
"@avocado/physics@1.x":
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
|
@ -2863,7 +2864,7 @@ loader-utils@^0.2.16:
|
||||||
json5 "^0.5.0"
|
json5 "^0.5.0"
|
||||||
object-assign "^4.0.1"
|
object-assign "^4.0.1"
|
||||||
|
|
||||||
loader-utils@^1.0.2, loader-utils@^1.1.0:
|
loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0:
|
||||||
version "1.2.3"
|
version "1.2.3"
|
||||||
resolved "https://npm.i12e.cha0s.io/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
|
resolved "https://npm.i12e.cha0s.io/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -3967,6 +3968,13 @@ scheduler@^0.13.6:
|
||||||
loose-envify "^1.1.0"
|
loose-envify "^1.1.0"
|
||||||
object-assign "^4.1.1"
|
object-assign "^4.1.1"
|
||||||
|
|
||||||
|
schema-utils@^0.4.0:
|
||||||
|
version "0.4.7"
|
||||||
|
resolved "https://npm.i12e.cha0s.io/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
|
||||||
|
dependencies:
|
||||||
|
ajv "^6.1.0"
|
||||||
|
ajv-keywords "^3.1.0"
|
||||||
|
|
||||||
schema-utils@^1.0.0:
|
schema-utils@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://npm.i12e.cha0s.io/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
|
resolved "https://npm.i12e.cha0s.io/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
|
||||||
|
@ -4778,6 +4786,13 @@ worker-farm@^1.5.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
errno "~0.1.7"
|
errno "~0.1.7"
|
||||||
|
|
||||||
|
worker-loader@2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://npm.i12e.cha0s.io/worker-loader/-/worker-loader-2.0.0.tgz#45fda3ef76aca815771a89107399ee4119b430ac"
|
||||||
|
dependencies:
|
||||||
|
loader-utils "^1.0.0"
|
||||||
|
schema-utils "^0.4.0"
|
||||||
|
|
||||||
wrap-ansi@^2.0.0:
|
wrap-ansi@^2.0.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://npm.i12e.cha0s.io/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
resolved "https://npm.i12e.cha0s.io/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user