I apologize for not being clear and not getting back to you sooner. From what I gather, for your solution, I think you should try:
Mesh.selectAntenna(MeshAntennaType::EXTERNAL);
This is a new feature in the latest beta OS. Perhaps you should install this in your firmware for all of your Gen 3 devices. I am assuming you have already attached an external antenna (from Particle) on ALL your Gen 3 devices.
Having done this, next, make sure you have EACH device send a ping (Particle.publish()) periodically. Disconnections do occur and hopefully devices successfully reconnect. But, in your firmware, if you don’t detect a particular device reconnection after some time, you can manually attempt to force a reconnection. To reset a Xenon, it should already be mesh subscribed to receive a reset message from the Boron. If the Xenon is flashing green it may still receive this message and perform a System.reset within your Xenon handler.
You may need to reset the entire network. To do this, use a Particle.function() to respond to your command to reset the Boron first. Once the Boron is reconnected, then send messages to your Xenon’s to reset as above. Do this in sequence of nearest Xenon first, second nearest, third, etc. Nearest is based on distance or, if you know it, RSSI signal strength (I am still trying to figure out how to determine this RSSI signal strength of a Xenon).
You may also try a relay or repeater Xenon to see if that helps your network. By this I mean, if your distance between two particular Xenon’s may be too far, or, out of sight, try adding a device in-between to see if this helps cut down disconnections.
Also, there are posts about using Omni Directional antennas you can attach to your Boron and/or Xenon’s which will hopefully give you better range. I have not tried this.
I am sorry. I have no sound advice to offer on BLE. I am only guessing in what I said about it in my first post. I am hoping someone else can jump in and offer their help. Thanks!