Winterflaw wrote:
Yups, and it's a damned if you do, damned if you don't problem - consider; in the naive solution for chat, each client must emit to every other client. That won't work. What's the alternative? every client needs to know where every other client is in the game world, so I can only emit to those who can read what is written - but to do that, every client needs to tell every other client where they are in the game world...
Prolly you can combine the two though. Every client knows where IT is in the game world, and so IT can filter out stuff it shouldn't hear. So the emitter can afford to error generously.
Another thought is that you have something like a write combining tree. Each chat emit enters the tree, then fans out along matching nodes - i.e. retransmission occurs, like NTP. It's not just the job of the emitting node to tell everyone else. You get more latency this way of course.
Hmmm, I don't think clients should filter out messages they aren't interested in. You said there are many clients managing a section of each zone. Well, depending on the messaged type (Ex. Say, Yell, Private or Channel) those people managing the selection of zone you're in should handle the chat request. They know who is in their little section so if it's a /say /yell they can send it to other clients in that section or adjacent sections.
Private messages seems more difficult to handle.
Channel specific messages could require players to actively register themselves in the channel. Each node involved in this could keep a ledger of subscriptions to a channel and broadcast the messages to subscribers. But who should do this broadcasting? Since we want many people verifying this and many nodes working together who should to the broadcasting to save bandwidth?
These world-wide problems seem difficult and maybe for them we should just hijack transient services like vent, mumble or discord that can easily move around the world at will to manage messages that reach outside of specific zones sections. Maybe people could host them too. Senders send to each one but maybe only a couple actually send the responses back since the the load of all clients is spread between them all.
Winterflaw wrote:I edited the original, after your reply but before I saw it, to say it's *harder*, rather than hard.
It's because symmetric designs are easier to reason about.
I guess but I think any way is hard, at least to me. Nothing about anything proposed seems easy.
Winterflaw wrote:*grin* I differentiate between C and C++ THANKYOU VERY MUCH
I am a hardcore C programmer. C++? pah!
C#??! double pah!!
Hmmm, I don't know why people dislike C#. Very portable, feels very productive and quite clean compared to other managed languages I think. Guess neither of us is fully suited to implement these ideas then seeing as neither of like the language these massive emu projects default to lol.