Skip to content

Instantly share code, notes, and snippets.

@vemacs
Last active February 12, 2016 00:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vemacs/c1cd57e7ded50975108b to your computer and use it in GitHub Desktop.
Save vemacs/c1cd57e7ded50975108b to your computer and use it in GitHub Desktop.
Field listenerMap;
Runnable relogRunnable;
ErrorHandler errorHandler;
public void loadSkype() {
try {
listenerMap = SkypeEventDispatcher.class.getDeclaredField("listeners");
listenerMap.setAccessible(true);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
errorHandler = (errorSource, error, shutdown) -> {
if (shutdown) {
getLogger().info("Error detected, relogging: " + error.toString());
skype = null;
scheduler.submit(relogRunnable);
}
};
relogRunnable = () -> {
getLogger().info("Starting relog process");
Skype newSkype = null;
boolean retry = true;
while (retry) {
try {
newSkype = new SkypeBuilder(username, password).withAllResources()
.withExceptionHandler(errorHandler).build();
newSkype.login();
getLogger().info("Logged in with username " + username);
newSkype.subscribe();
getLogger().info("Successfully subscribed");
newSkype.getEventDispatcher().registerListener(new SkypeListener());
retry = false;
} catch (Throwable t) {
t.printStackTrace();
try {
Thread.sleep(10000);
} catch (InterruptedException ignored) {
}
}
}
Skype oldSkype = skype;
if (oldSkype != null) {
try {
Map<?, ?> listeners = (Map<?, ?>) listenerMap.get(oldSkype.getEventDispatcher());
listeners.clear();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
try {
getLogger().info("Logging out of old Skype");
oldSkype.logout();
} catch (Throwable t) {
t.printStackTrace();
}
}
skype = newSkype;
};
scheduler.scheduleAtFixedRate(relogRunnable, 0, 8, TimeUnit.HOURS);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment