// Path: src/main/java/org/audit4j/microservice/core/Ack.java
// public class Ack implements Serializable{
// 
// 	/**
// 	 * 
// 	 */
// 	private static final long serialVersionUID = -8707468501787579530L;
// 
// 	private String message;
// 	
// 	private int code;
// 
// 	public String getMessage() {
// 		return message;
// 	}
// 
// 	public void setMessage(String message) {
// 		this.message = message;
// 	}
// 
// 	public int getCode() {
// 		return code;
// 	}
// 
// 	public void setCode(int code) {
// 		this.code = code;
// 	}
// 
// 	public static Ack SUCCESS(){
// 		Ack ack = new Ack();
// 		ack.setCode(200);
// 		ack.setMessage("success");
// 		return ack;
// 	}
// 	
// 	public static Ack FAIL(){
// 		Ack ack = new Ack();
// 		ack.setCode(500);
// 		ack.setMessage("fail");
// 		return ack;
// 	}
// 	
// 	public static Ack UNAUTHORIZED(){
// 		Ack ack = new Ack();
// 		ack.setCode(401);
// 		ack.setMessage("unauthorized");
// 		return ack;
// 	}
// }
// 
// Path: src/main/java/org/audit4j/microservice/core/Transport.java
// public abstract class Transport implements Initializable {
// 
// 	/** The reciever. */
// 	EventReceiver reciever = new EventReceiverImpl();
// 	
// 	/** The properties. */
// 	private Map<String, String> properties;
// 
// 	/**
// 	 * Receive.
// 	 *
// 	 * @param event the event
// 	 */
// 	public void receive(AuditEvent event) {
// 		reciever.receive(event);
// 	}
// 
// 	/**
// 	 * Gets the property.
// 	 *
// 	 * @param key the key
// 	 * @return the property
// 	 */
// 	public String getProperty(String key) {
//         return properties.get(key);
//     }
// 	
// 	/**
// 	 * Sets the properties.
// 	 *
// 	 * @param properties the properties
// 	 */
// 	public void setProperties(final Map<String, String> properties) {
// 		this.properties = properties;
// 	}
// 
//     public EventReceiver getReciever() {
//         return reciever;
//     }
// }


import org.audit4j.core.dto.AuditEvent;
import org.audit4j.core.exception.InitializationException;
import org.audit4j.core.util.Log;
import org.audit4j.microservice.core.Ack;
import org.audit4j.microservice.core.Transport;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
package org.audit4j.microservice.transport;



public class WebSocketTransportServer extends Transport {

	Serializer serializer;

	private int port = 9091;

	@Override
	public void init() throws InitializationException {

		serializer = new SerializerImpl();

		// VertxOptions options = new VertxOptions();
		Vertx vertx = Vertx.vertx();

		vertx.createHttpServer()
				.websocketHandler(
						ws -> ws.handler(buffer -> {
							ws.frameHandler(event -> {
								if (event.isFinal()) {
									if (event.isBinary()) {
										byte[] buff = buffer.getBytes();
										try {
											AuditEvent auditEvent = serializer
													.fromByteArray(buff,
															AuditEvent.class);

											Log.info("Recived Message..");
											ws.writeBinaryMessage(Buffer.buffer(serializer
// Path: src/main/java/org/audit4j/microservice/core/Ack.java
// public class Ack implements Serializable{
// 
// 	/**
// 	 * 
// 	 */
// 	private static final long serialVersionUID = -8707468501787579530L;
// 
// 	private String message;
// 	
// 	private int code;
// 
// 	public String getMessage() {
// 		return message;
// 	}
// 
// 	public void setMessage(String message) {
// 		this.message = message;
// 	}
// 
// 	public int getCode() {
// 		return code;
// 	}
// 
// 	public void setCode(int code) {
// 		this.code = code;
// 	}
// 
// 	public static Ack SUCCESS(){
// 		Ack ack = new Ack();
// 		ack.setCode(200);
// 		ack.setMessage("success");
// 		return ack;
// 	}
// 	
// 	public static Ack FAIL(){
// 		Ack ack = new Ack();
// 		ack.setCode(500);
// 		ack.setMessage("fail");
// 		return ack;
// 	}
// 	
// 	public static Ack UNAUTHORIZED(){
// 		Ack ack = new Ack();
// 		ack.setCode(401);
// 		ack.setMessage("unauthorized");
// 		return ack;
// 	}
// }
// 
// Path: src/main/java/org/audit4j/microservice/core/Transport.java
// public abstract class Transport implements Initializable {
// 
// 	/** The reciever. */
// 	EventReceiver reciever = new EventReceiverImpl();
// 	
// 	/** The properties. */
// 	private Map<String, String> properties;
// 
// 	/**
// 	 * Receive.
// 	 *
// 	 * @param event the event
// 	 */
// 	public void receive(AuditEvent event) {
// 		reciever.receive(event);
// 	}
// 
// 	/**
// 	 * Gets the property.
// 	 *
// 	 * @param key the key
// 	 * @return the property
// 	 */
// 	public String getProperty(String key) {
//         return properties.get(key);
//     }
// 	
// 	/**
// 	 * Sets the properties.
// 	 *
// 	 * @param properties the properties
// 	 */
// 	public void setProperties(final Map<String, String> properties) {
// 		this.properties = properties;
// 	}
// 
//     public EventReceiver getReciever() {
//         return reciever;
//     }
// }


// Path: src/main/java/org/audit4j/microservice/transport/WebSocketTransportServer.java
import org.audit4j.core.dto.AuditEvent;
import org.audit4j.core.exception.InitializationException;
import org.audit4j.core.util.Log;
import org.audit4j.microservice.core.Ack;
import org.audit4j.microservice.core.Transport;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;

package org.audit4j.microservice.transport;



public class WebSocketTransportServer extends Transport {

	Serializer serializer;

	private int port = 9091;

	@Override
	public void init() throws InitializationException {

		serializer = new SerializerImpl();

		// VertxOptions options = new VertxOptions();
		Vertx vertx = Vertx.vertx();

		vertx.createHttpServer()
				.websocketHandler(
						ws -> ws.handler(buffer -> {
							ws.frameHandler(event -> {
								if (event.isFinal()) {
									if (event.isBinary()) {
										byte[] buff = buffer.getBytes();
										try {
											AuditEvent auditEvent = serializer
													.fromByteArray(buff,
															AuditEvent.class);

											Log.info("Recived Message..");
											ws.writeBinaryMessage(Buffer.buffer(serializer
													.toByteArray(Ack.SUCCESS())));