<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ao2-client/src/networkmanager.cpp, branch master</title>
<subtitle>AO2 client fork</subtitle>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/'/>
<entry>
<title>Handle extension packets using binary frames</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T18:56:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=d6352bc889638b82a887e0a1a138f2b8086dbbdb'/>
<id>d6352bc889638b82a887e0a1a138f2b8086dbbdb</id>
<content type='text'>
The subprotocol shall use binary frames, and AO protocol stays separated
within the text frames.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The subprotocol shall use binary frames, and AO protocol stays separated
within the text frames.
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't list legacy servers</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:58:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=ce45b160c1a590b38d87e9d00cadc06260b2d311'/>
<id>ce45b160c1a590b38d87e9d00cadc06260b2d311</id>
<content type='text'>
We haven't been able to connect to legacy servers for a very long time
now, and the entries only serve to clutter the list. It's time to filter
them out in favor of cleaning up the list and showing WSS-enabled
servers due appreciation.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We haven't been able to connect to legacy servers for a very long time
now, and the entries only serve to clutter the list. It's time to filter
them out in favor of cleaning up the list and showing WSS-enabled
servers due appreciation.
</pre>
</div>
</content>
</entry>
<entry>
<title>Support Secure WebSocket</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:57:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=79c2262cae02b513aee70943f7e07a9205316bdf'/>
<id>79c2262cae02b513aee70943f7e07a9205316bdf</id>
<content type='text'>
Add full WSS support to public server list (using wss_port, overriding
insecure port), favorite servers list, and direct connections, and show
which servers are secure.

Revert the upstream's removal of `legacy` ServerInfo field, as I use it
to filter out legacy servers. To differentiate schemes, the `scheme`
field is used, either "ws" or "wss". I don't see the reason to add "tcp"
protocol when we don't even support it.

For the UI, add icons for secure and insecure connections. Highlight
secure servers with a green background.

In the favorite server dialog, a checkbox was added to select whether
the server is using WSS.

In the direct connection dialog, support "wss" scheme and default ports:
80 for WS, 443 for WSS, as per the WebSocket specification.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add full WSS support to public server list (using wss_port, overriding
insecure port), favorite servers list, and direct connections, and show
which servers are secure.

Revert the upstream's removal of `legacy` ServerInfo field, as I use it
to filter out legacy servers. To differentiate schemes, the `scheme`
field is used, either "ws" or "wss". I don't see the reason to add "tcp"
protocol when we don't even support it.

For the UI, add icons for secure and insecure connections. Highlight
secure servers with a green background.

In the favorite server dialog, a checkbox was added to select whether
the server is using WSS.

In the direct connection dialog, support "wss" scheme and default ports:
80 for WS, 443 for WSS, as per the WebSocket specification.
</pre>
</div>
</content>
</entry>
<entry>
<title>Rewrite audio engine: replace BASS with miniaudio</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-24T02:56:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=3f6fb17deddd1b366d16db5a2531c82407ced9db'/>
<id>3f6fb17deddd1b366d16db5a2531c82407ced9db</id>
<content type='text'>
SFX and blip players largely remain the same.

For the music player, we now have to implement network streaming
natively, we no longer have a convenient function that did everything
for us. I introduced QNetworkRequest to download the stream in memory
and signal when it's ready to be decoded and played back. The size is
guarded to prevent the client from accidentally downloading terabytes of
audio.

Delete QFutureWatcher, we no longer need it for concurrency. miniaudio
uses a separate audio thread. Network donwloads and communication with
the track name display are handled by Qt signals.

Also, delete an odd "music.txt" feature. Its purpose was specifying
offsets for loops in a text file per track, but it remained obscure and
unused in practice.

Unsupported:

- Large streams, including unbounded ones (radio). We'll need a ring
  buffer for that, and a mechanism to write to it from the network and
  feed it to the audio thread.

- Effect flags: fade in, fade out, sync pos. Ignored.

- Audio device selection.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
SFX and blip players largely remain the same.

For the music player, we now have to implement network streaming
natively, we no longer have a convenient function that did everything
for us. I introduced QNetworkRequest to download the stream in memory
and signal when it's ready to be decoded and played back. The size is
guarded to prevent the client from accidentally downloading terabytes of
audio.

Delete QFutureWatcher, we no longer need it for concurrency. miniaudio
uses a separate audio thread. Network donwloads and communication with
the track name display are handled by Qt signals.

Also, delete an odd "music.txt" feature. Its purpose was specifying
offsets for loops in a text file per track, but it remained obscure and
unused in practice.

Unsupported:

- Large streams, including unbounded ones (radio). We'll need a ring
  buffer for that, and a mechanism to write to it from the network and
  feed it to the audio thread.

- Effect flags: fade in, fade out, sync pos. Ignored.

- Audio device selection.
</pre>
</div>
</content>
</entry>
<entry>
<title>WSS support (#1114)</title>
<updated>2026-02-03T09:39:53+00:00</updated>
<author>
<name>stonedDiscord</name>
<email>Tukz@gmx.de</email>
</author>
<published>2026-02-03T09:39:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=5dea0406c73704ebf30cf0b8aac671f698e89959'/>
<id>5dea0406c73704ebf30cf0b8aac671f698e89959</id>
<content type='text'>
* add ssl scheme

* use protocol

* set port

* remove last legacy entry</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* add ssl scheme

* use protocol

* set port

* remove last legacy entry</pre>
</div>
</content>
</entry>
<entry>
<title>Add playerlist widget element (#996)</title>
<updated>2024-07-12T09:48:01+00:00</updated>
<author>
<name>Salanto</name>
<email>62221668+Salanto@users.noreply.github.com</email>
</author>
<published>2024-07-12T09:48:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=fb64ca386c51cc3942e1f38cfd76132b1b50e9db'/>
<id>fb64ca386c51cc3942e1f38cfd76132b1b50e9db</id>
<content type='text'>
* Commit

* Boyfailure code commit

* Cooking code spaghetti

* Accidental overwrite recursive function call hell

* Implemented player list

* Add partial moderator widget

Sleepy time! Hee-Hoo!

* Moderator Dialog - Step 1 - WIP

* Appease the clang gods

* Clang appeasement policy

* *sacrifices goat to clang*

* Added player report, reworked implementation, ...

* Added player-specific report
* Reworked implementation
  * No longer uses JSON.
* Removed preset loader.

---------

Co-authored-by: TrickyLeifa &lt;date.epoch@gmail.com&gt;
Co-authored-by: Leifa &lt;26681464+TrickyLeifa@users.noreply.github.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Commit

* Boyfailure code commit

* Cooking code spaghetti

* Accidental overwrite recursive function call hell

* Implemented player list

* Add partial moderator widget

Sleepy time! Hee-Hoo!

* Moderator Dialog - Step 1 - WIP

* Appease the clang gods

* Clang appeasement policy

* *sacrifices goat to clang*

* Added player report, reworked implementation, ...

* Added player-specific report
* Reworked implementation
  * No longer uses JSON.
* Removed preset loader.

---------

Co-authored-by: TrickyLeifa &lt;date.epoch@gmail.com&gt;
Co-authored-by: Leifa &lt;26681464+TrickyLeifa@users.noreply.github.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>Remove TCP entry point (#1007)</title>
<updated>2024-07-09T11:07:30+00:00</updated>
<author>
<name>Leifa</name>
<email>26681464+TrickyLeifa@users.noreply.github.com</email>
</author>
<published>2024-07-09T11:07:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=efd2571459924f40718130f7edd28a72a76b12d7'/>
<id>efd2571459924f40718130f7edd28a72a76b12d7</id>
<content type='text'>
* Remove TCP entry point

Resolve #987

* Remove TCP entry point
  * Servers that do not support WebSocket will be marked as `Legacy`
  * Removal of TCP connection from the master will follow later.

* Tweaked error message</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Remove TCP entry point

Resolve #987

* Remove TCP entry point
  * Servers that do not support WebSocket will be marked as `Legacy`
  * Removal of TCP connection from the master will follow later.

* Tweaked error message</pre>
</div>
</content>
</entry>
<entry>
<title>stop filling the log with raw net traffic</title>
<updated>2024-05-20T17:03:36+00:00</updated>
<author>
<name>in1tiate</name>
<email>32779090+in1tiate@users.noreply.github.com</email>
</author>
<published>2024-05-20T17:03:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=e2b47afd912e80f784bc6a25bf03e65eb405e0a6'/>
<id>e2b47afd912e80f784bc6a25bf03e65eb405e0a6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Lightly reworked `NetworkManager`, ...</title>
<updated>2024-05-17T17:04:57+00:00</updated>
<author>
<name>TrickyLeifa</name>
<email>date.epoch@gmail.com</email>
</author>
<published>2024-05-17T14:39:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=1ef96383c8f7ed136a0e028aef0835b4838b5e95'/>
<id>1ef96383c8f7ed136a0e028aef0835b4838b5e95</id>
<content type='text'>
* Lightly reworked `NetworkManager`
* Added new modules to handle various connection types.
  * TCP
  * WebSocket
* Added general string splitter alias based on Qt version.
* Replaced `lobby_constructed` and `courtroom_constructed`
* Refactored and partially reimplemented the following classes:
  * `AOBlipPlayer`
  * `AOEmotePreview`
  * `AOMusicPlayer`
  * `AOSfxPlayer`
  * `AOTextArea`
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Lightly reworked `NetworkManager`
* Added new modules to handle various connection types.
  * TCP
  * WebSocket
* Added general string splitter alias based on Qt version.
* Replaced `lobby_constructed` and `courtroom_constructed`
* Refactored and partially reimplemented the following classes:
  * `AOBlipPlayer`
  * `AOEmotePreview`
  * `AOMusicPlayer`
  * `AOSfxPlayer`
  * `AOTextArea`
</pre>
</div>
</content>
</entry>
<entry>
<title>Reimplemented favorite server widget, ...</title>
<updated>2024-05-16T01:09:21+00:00</updated>
<author>
<name>TrickyLeifa</name>
<email>date.epoch@gmail.com</email>
</author>
<published>2024-05-16T01:09:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=39e4354b1dae5d8487ea5b84be9f304b1950a61a'/>
<id>39e4354b1dae5d8487ea5b84be9f304b1950a61a</id>
<content type='text'>
* Reworked favorite server widget
* Renamed `server_type` to `ServerInfo`
* Renamed `connection_type` to `ServerConnectionType`
* Refactored `AOCharButton`
* Reimplemented `AOButton`
* Partially reimplemented `AOEmoteButton`
* Refactored `AOEvidenceButton`
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Reworked favorite server widget
* Renamed `server_type` to `ServerInfo`
* Renamed `connection_type` to `ServerConnectionType`
* Refactored `AOCharButton`
* Reimplemented `AOButton`
* Partially reimplemented `AOEmoteButton`
* Refactored `AOEvidenceButton`
</pre>
</div>
</content>
</entry>
</feed>
