This article provides instructions on explicitly configuring your Ditto instance to listen for connections on a specific port and to connect to remote instances using a host (IP) and port.
You can read more about the various transports that Ditto uses in Mesh Networking.
Although Ditto automatically attempts to connect to other instances on the Local Area Network (LAN), Bluetooth Low Energy (LE), and Apple Wireless Direct Link (AWDL), supplying a DittoTransportConfig does not enable this feature by default.
Rather, you manually enable peer-to-peer connections using EnableAllPeerToPeer(). (See Enabling and Disabling Transports for more information.)
// Create a new DittoTransportConfig()var config =DittoTransportConfig()//Enable all peer to peer transportsconfig.enableAllPeerToPeer()//Or enable/disable each transport separately//BluetoothLeconfig.peerToPeer.bluetoothLE.isEnabled =true//Local Area Networkconfig.peerToPeer.lan.isEnabled =true//Awdlconfig.peerToPeer.awdl.isEnabled =trueditto.transportConfig = configdo{try ditto.startSync()}catch(let err){print(err.localizedDescription)}
If you need additional connection configurations for the current Ditto instance, configure it to listen for connections on a specific port and to connect to remote instances using a host (IP) and port:
1
Before calling startSync(), create a DittoTransportConfig object with the desired settings.
2
Using the ditto.SetTransportConfig API method, set the created object on your Ditto instance.
3
Call the startSync method on your Ditto instance to initiate sync with the configured settings.
ditto =Ditto( identity:DittoIdentity.onlinePlayground( appID:"REPLACE_ME_WITH_YOUR_APP_ID", token:"REPLACE_ME_WITH_YOUR_PLAYGROUND_TOKEN", enableDittoCloudSync:false,// This is required to be set to false to use the correct URLs customAuthURL:URL(string:"REPLACE_ME_WITH_YOUR_AUTH_URL")))// Set the Ditto Websocket URLvar config =DittoTransportConfig()config.connect.webSocketURLs.insert("wss://REPLACE_ME_WITH_YOUR_WEBSOCKET_URL")// Optionally enable all P2P transports if using P2P Sync// Do not call this if only using Ditto Cloud Syncconfig.enableAllPeerToPeer()ditto.transportConfig = configdo{try ditto.startSync()}catch(let err){print(err.localizedDescription)}
var config =DittoTransportConfig()// Connect explicitly to a remote devicesconfig.connect.tcpServers.insert("135.1.5.5:12345")config.connect.tcpServers.insert("185.1.5.5:12345")ditto.transportConfig = configdo{try ditto.startSync()}catch(let err){print(err.localizedDescription)}
var config =DittoTransportConfig()// Listen for incoming connections on port 4000config.listen.tcp.isEnabled =trueconfig.listen.tcp.interfaceIP ="0.0.0.0"config.listen.tcp.port =4000ditto.transportConfig = configdo{try ditto.startSync()}catch(let err){print(err.localizedDescription)}
var config =DittoTransportConfig()// 1. Enable All Peer to Peer Connectionsconfig.enableAllPeerToPeer()// 2. Listen for incoming connections on port 4000config.listen.tcp.isEnabled =trueconfig.listen.tcp.interfaceIP ="0.0.0.0"config.listen.tcp.port =4000// 3. Connect explicitly to remote devicesconfig.connect.tcpServers.insert("135.1.5.5:12345")config.connect.tcpServers.insert("185.1.5.5:12345")ditto.transportConfig = configdo{try ditto.startSync()}catch(let err){print(err.localizedDescription)}
// Setting up inside a ViewControllerlet ditto =Ditto(identity:DittoIdentity.onlinePlayground(appID:"REPLACE_ME_WITH_YOUR_APP_ID", token:"REPLACE_ME_WITH_YOUR_PLAYGROUND_TOKEN"))ditto.delegate =selftry! ditto.startSync()// Now you can observe real time changes to the transport conditions:extensionViewController:DittoDelegate{functransportConditionDidChange(transportID:Int64, condition:TransportCondition){if condition ==.BleDisabled{print("BLE disabled")}elseif condition ==.NoBleCentralPermission{print("Permission missing for BLE")}elseif condition ==.NoBlePeripheralPermission{print("Permission missing for BLE")}}}