feat: socket-worker

This commit is contained in:
cha0s 2019-04-25 00:09:28 -05:00
parent ffad67ca44
commit 284f67279b
6 changed files with 41 additions and 27 deletions

View File

@ -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}
/>; />;

View File

@ -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>

View File

@ -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();

View File

@ -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'),
], ],

View File

@ -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: {

View File

@ -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"