Add reconnect logic, separate out connect logic into own method, make it all play nice with lazy connection