package org.stevewinfield.sunrise.network;

import org.stevewinfield.sunrise.Logging;
import org.stevewinfield.sunrise.Sunrise;
import org.stevewinfield.sunrise.communication.MessageComposer;
import org.stevewinfield.sunrise.communication.MessageEvent;
import org.stevewinfield.sunrise.game.sessions.Session;
import org.webbitserver.BaseWebSocketHandler;
import org.webbitserver.WebSocketConnection;

public class WebSocketGameHandler extends BaseWebSocketHandler {
	
	@Override
	public void onOpen(WebSocketConnection connection) {
		if (!Sunrise.getSessionManager().makeSession(connection)) {
			connection.close();
		}
		Logging.writeLog("Connection opened.");
		
		MessageComposer composer = new MessageComposer(1);
		composer.pushString(Sunrise.rc4Key);
		connection.send(composer.toString());
	}
	
	@Override
	public void onClose(WebSocketConnection connection) {
		Session session = Sunrise.getSessionManager().get(connection);
		if (session != null) {
			Logging.writeLog("Connection closed.");
			Sunrise.getSessionManager().removeSession(connection);
		}
	}
	
	@Override
	public void onMessage(WebSocketConnection connection, String message) {
		Session session = Sunrise.getSessionManager().get(connection);
		if (session != null) {
			Sunrise.getMessageHandler().handleMessage(session, new MessageEvent(message));
		}
	}
}
