Add dutil proc haveGame() and use it to detect duplicate
invitations. I'm passing, but ignoring on android, the channel, which
means that for now you can't invite yourself and on-device testing
requires having CrossWords and CrossDbg or a second user.
Prev build will crash on android 12 because it claims to know about
sdk 31 but gets Bluetooth permissions wrong. It's been released on
fdroid due to miscommunication. Fix will be to roll non-gplay variants
back to 30 for now. I'm deliberately breaking gplay builds because
nothing should ship there until I sort out the permissions stuff 31
requires. (Shipping 30 is no longer possible for the gplay store.)
There was some confusion around host and self addresses, where they're
created, default values, removing conTypes from defaults that are not
in received host addr, etc. I left in some asserts to help understand
if code that seems wrong but hard to fix is still getting called.
Current networking, based on invitations rather than a relay that
plays matchmaker, allows host to know its address when a game is
created, and for guest to know its host's address in
addition. Enforcing this makes inviting and rematching in common
code (coming soon) easier. Big change on Android is I used to create a
new game prior to passing it to GameConfigDelegate, but now I have to
wait for user to configure (including choosing how to communicate)
before I can create it.
Somehow getLangIsoCode() is returning null when called early in app
launch, on some subset of devices the Play Store isn't
identifying. I'm just going to default to "en" when that happens.
I'd removed it when the relay went away, but MQTT apparently doesn't
listen for network changes on its own and so there was no attempt to
resend messages when the device regained connectivity. Now there
is. Old logic to avoid thrashing remains and is not tested with MQTT
-- shouldn't need to be....