Skip to content

Commit

Permalink
feat: Gráfico de latência
Browse files Browse the repository at this point in the history
  • Loading branch information
josejefferson committed Jan 29, 2025
1 parent 1306f29 commit cc231c8
Show file tree
Hide file tree
Showing 13 changed files with 156 additions and 33 deletions.
Binary file modified bun.lockb
Binary file not shown.
28 changes: 18 additions & 10 deletions dist/css/joystick.css
Original file line number Diff line number Diff line change
Expand Up @@ -238,13 +238,19 @@ i.mdi {
transition: 1s ease;
}

/* Ping */
.deviceInfo .ping {
font-size: 14px;
}

/* Status */
.deviceInfo .status {
align-items: center;
display: flex;
font-size: 14px;
height: 20px;
justify-content: center;
margin-top: 10px;
opacity: 1;
overflow: hidden;
transition: height 0.15s ease, opacity 1s ease 0.15s;
Expand Down Expand Up @@ -287,26 +293,28 @@ body.disconnected .deviceInfo .status::after {
content: 'Desconectado';
}

.ping,
.ping-chart {
bottom: 0;
height: 120px !important;
left: 0;
opacity: 0.5;
pointer-events: none;
position: fixed;
width: 210px !important;
}

.version {
bottom: 10px;
color: inherit;
font-size: 12px;
pointer-events: none;
position: fixed;
bottom: 5px;
right: 15px;
user-select: none;
white-space: pre;
z-index: 5;
}

.ping {
left: 5px;
}

.version {
right: 5px;
}

/* ==========================================================================
Debug
========================================================================== */
Expand Down
13 changes: 9 additions & 4 deletions dist/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,6 @@
/>
<div class="label">Informações</div>
</label>
<label class="chip hide">
<input type="checkbox" name="hide" data-id="mobystk:ping" value="mobystk:ping" />
<div class="label">Ping</div>
</label>
<label class="chip hide">
<input
type="checkbox"
Expand All @@ -227,6 +223,15 @@
/>
<div class="label">Versão</div>
</label>
<label class="chip hide">
<input
type="checkbox"
name="hide"
data-id="mobystk:ping_chart"
value="mobystk:ping_chart"
/>
<div class="label">Gráfico de latência</div>
</label>
</div>
</main>
</section>
Expand Down
4 changes: 3 additions & 1 deletion dist/joystick.html
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@
<span class="player-number"></span>
</span>
<br />
<span class="ping">Ping: +999ms</span>
<br />
<span class="status"></span>
</div>

<div class="ping"></div>
<canvas class="ping-chart" width="210" height="120"></canvas>
<div class="version"></div>

<!-- Edit button -->
Expand Down
2 changes: 1 addition & 1 deletion dist/js/chunk-ZXTOKSAU.js → dist/js/chunk-F47FR2AL.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/js/index/index.js

Large diffs are not rendered by default.

47 changes: 44 additions & 3 deletions dist/js/joystick/index.js

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mobystk",
"version": "1.0.1",
"version": "1.0.2",
"repository": "https://github.com/josejefferson/mobystk",
"author": "Jefferson Dantas <[email protected]>",
"type": "module",
Expand All @@ -14,6 +14,7 @@
},
"devDependencies": {
"@josejefferson/eslint-config-typescript": "^1.1.0",
"@types/chroma-js": "^3.1.1",
"esbuild": "^0.20.2",
"esbuild-plugin-clean": "^1.0.1",
"eslint": "^8",
Expand All @@ -26,6 +27,8 @@
"dependencies": {
"@simonwep/pickr": "^1.8.2",
"@types/semver": "^7.5.8",
"chart.js": "^4.4.7",
"chroma-js": "^3.1.2",
"nipplejs": "^0.9.1",
"semver": "^7.6.3",
"store2": "^2.14.2"
Expand Down
2 changes: 1 addition & 1 deletion src/elements/buttons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,7 @@ const buttons: IButton[] = [
anchorX: AnchorX.CENTER,
anchorY: AnchorY.CENTER,
x: [0, 'px'],
y: [-50, 'px'],
y: [-70, 'px'],
width: [70, 'px'],
height: [20, 'px'],
content: { type: 'mobystk:text', value: 'Tela cheia' },
Expand Down
3 changes: 2 additions & 1 deletion src/index/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ const hidden = getOpt('hidden', [
'mobystk:diag_left_up',
'mobystk:diag_right_up',
'mobystk:diag_left_down',
'mobystk:diag_right_down'
'mobystk:diag_right_down',
'mobystk:ping_chart'
])
for (const item of locked) {
const $input = document.querySelector<HTMLInputElement>(
Expand Down
1 change: 1 addition & 0 deletions src/joystick/elements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const $DIClock = $deviceInfo.querySelector<HTMLElement>('.clock')!
export const $DIPlayerNumber = $deviceInfo.querySelector<HTMLElement>('.player .player-number')!
export const $DIStatus = $deviceInfo.querySelector<HTMLElement>('.status')!
export const $ping = document.querySelector<HTMLElement>('.ping')!
export const $pingChart = document.querySelector('.ping-chart') as HTMLCanvasElement
export const $version = document.querySelector<HTMLElement>('.version')!
export const $controllerIndicator = document.querySelector('.controller-indicator')!
export const $layout = document.querySelector('.controller-layout')!
Expand Down
65 changes: 60 additions & 5 deletions src/joystick/user-interface.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { BarController, BarElement, CategoryScale, Chart, LinearScale } from 'chart.js'
import chroma from 'chroma-js'
import options from '../shared/options'
import loading from '../utils/loading'
import { toast } from '../utils/toast'
Expand All @@ -10,7 +12,7 @@ import {
$DIClock,
$DIPlayerNumber,
$edit,
$ping,
$pingChart,
$root,
$version
} from './elements'
Expand All @@ -19,9 +21,6 @@ import {
if (options.hidden.includes('mobystk:deviceInfo')) {
$deviceInfo.classList.add('hidden')
}
if (options.hidden.includes('mobystk:ping')) {
$ping.classList.add('hidden')
}
if (options.hidden.includes('mobystk:version')) {
$version.classList.add('hidden')
}
Expand Down Expand Up @@ -126,4 +125,60 @@ if (options.debug)
updateInfo()
})

export {}
// GRÁFICO DE LATÊNCIA
Chart.register(BarController, CategoryScale, LinearScale, BarElement)

const MAX_PINGS = 30
const hidePingChart = options.hidden.includes('mobystk:ping_chart')
const pings = Array(MAX_PINGS).fill(0)

const chart = hidePingChart
? null
: new Chart($pingChart, {
type: 'bar',
options: {
responsive: false,
animation: {
duration: 500,
easing: 'easeOutQuart'
},
scales: {
x: { display: false },
y: { display: false, min: 0, max: 999 }
},
plugins: {
legend: { display: false },
tooltip: { enabled: false }
}
},
data: {
labels: pings.map((_, i) => i + 1),
datasets: [
{
data: pings,
backgroundColor: pings.map(pingBarColor),
borderWidth: 0
}
]
}
})

/** Adiciona um novo ping ao gráfico */
export function addPing(time: number) {
if (!chart) return
if (pings.length >= MAX_PINGS) pings.shift()
pings.push(time)
chart.data.labels = pings.map((_, i) => i + 1)
chart.data.datasets[0].data = pings
chart.data.datasets[0].backgroundColor = pings.map(pingBarColor)
chart.update('active')
}

/** Retorna a cor da barra baseado no valor */
export function pingBarColor(time: number) {
return chroma
.scale(['#00bcff', '#fdc700', '#fb2c36'])
.domain([0, 300, 999])
.mode('lab')(time)
.hex()
}
15 changes: 11 additions & 4 deletions src/shared/socket.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import semver from 'semver'
import { lastMacro, recordingMacro } from '../joystick/element-actions'
import { $controllerIndicator } from '../joystick/elements'
import { updateInfo } from '../joystick/user-interface'
import { addPing, updateInfo } from '../joystick/user-interface'
import { Joystick, GamepadKey, SocketMessages } from '../types/socket'
import { toast } from '../utils/toast'
import vibrate from '../utils/vibrate'
Expand Down Expand Up @@ -69,10 +69,13 @@ class MobyStkSocket {
}

sendPing() {
if (this.instance.readyState !== this.instance.OPEN) return
if (this.pingID && $ping) $ping.innerText = '+999ms'
if (this.pingID && $ping) {
$ping.innerText = 'Ping: +999ms'
addPing(999)
}
this.pingID = Math.floor(Math.random() * 1000000)
this.pingTime = Date.now()
if (this.instance.readyState !== this.instance.OPEN) return
this.sendCommand('ping', { id: this.pingID })
}

Expand Down Expand Up @@ -141,7 +144,11 @@ class MobyStkSocket {

onPong(data: SocketMessages.Server.Pong) {
if (Number(data.id) === this.pingID) {
if ($ping) $ping.innerText = String(Date.now() - this.pingTime) + 'ms'
if ($ping) {
const pingTime = Date.now() - this.pingTime
$ping.innerText = `Ping: ${pingTime}ms`
addPing(pingTime)
}
this.pingID = undefined
}
}
Expand Down

0 comments on commit cc231c8

Please sign in to comment.