             }
         }
         
-        debugPrint("BP " + formatter.string(from: Date.init()) + " - " + str)
+        print("BP " + formatter.string(from: Date.init()) + " - " + str)
     #endif
 }
 

            name = name!.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) // sender pads with spaces to 32 bytes
            peer.displayName = self.sanitizeCharsToDNSChars(str: name!) // probably unnecessary but need to be safe
            
            // we're the server. If we are advertising and browsing for the same serviceType, there's a duplicate peer situation to take care of -- one created by browsing, one when socket was accepted. Remedy: kill old one, keep this one
            for existingPeer in self.peers.filter({ $0.displayName == peer.displayName && $0 != peer }) {
                if let indexOfPeer = self.peers.index(of: existingPeer) {
                    DLog("BluepeerObject: removing dupe peer \(self.peers[indexOfPeer].displayName) from index \(indexOfPeer), had socket: \(self.peers[indexOfPeer].socket != nil ? "ACTIVE" : "nil")")
                    self.peers.remove(at: indexOfPeer)
                }
                self.bailOn(socket: existingPeer.socket, peer: existingPeer)

    var announced = false
    open var keepaliveTimer: Timer?
    open var lastReceivedData: Date = Date.init(timeIntervalSince1970: 0)
    open var connectBlock: (()->Void)?
    override open var description: String {
        return "[name: " + displayName + ", state: " + state.description + ", role: " + role.description + ", socket: " + socket.debugDescription + ", dnsService: " + dnsService.debugDescription + ", lastReceivedData: " + lastReceivedData.description + ", keepAlive: " + keepaliveTimer.debugDescription + "]\n"
    }
}

@objc public protocol BluepeerMembershipRosterDelegate {
