package com.sonycsl.Kadecot.wamp;
import android.util.Log;
import com.sonycsl.Kadecot.core.provider.KadecotCoreStore;
import com.sonycsl.Kadecot.wamp.provider.KadecotProviderClient;
import com.sonycsl.wamp.WampPeer;
import com.sonycsl.wamp.WampPeer.Callback;
import com.sonycsl.wamp.message.WampMessage;
import com.sonycsl.wamp.message.WampMessageFactory;
import com.sonycsl.wamp.util.WampRequestIdGenerator;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Map;
public class KadecotProtocolSetupCallback implements Callback {
public interface OnCompletionListener {
public void onCompletion();
}
private final Map<String, String> mTopics;
private final Map<String, String> mProcedures;
private final OnCompletionListener mListener;
private static final String TAG = KadecotProtocolSetupCallback.class.getSimpleName();
public KadecotProtocolSetupCallback(Map<String, String> topics,
Map<String, String> procedures, OnCompletionListener listener) {
mTopics = topics;
mProcedures = procedures;
mListener = listener;
}
@Override
public void preConnect(WampPeer connecter, WampPeer connectee) {
}
@Override
public void postConnect(WampPeer connecter, WampPeer connectee) {
}
@Override
public void preTransmit(WampPeer transmitter, WampMessage msg) {
if (msg.isGoodbyeMessage()) {
for (String topic : mTopics.keySet()) {
try {
transmitter.transmit(WampMessageFactory.createCall(
WampRequestIdGenerator.getId(),
new JSONObject(),
KadecotProviderClient.Procedure.REMOVE_TOPIC.getUri(),
new JSONArray(),
new JSONObject().put(KadecotCoreStore.Topics.TopicColumns.NAME,
topic)));
} catch (JSONException e) {
Log.e(TAG, "JSONException");
}
}
for (String procedure : mProcedures.keySet()) {
try {
transmitter.transmit(WampMessageFactory.createCall(
WampRequestIdGenerator.getId(),
new JSONObject(),
KadecotProviderClient.Procedure.REMOVE_PROCEDURE.getUri(),
new JSONArray(),
new JSONObject().put(KadecotCoreStore.Procedures.ProcedureColumns.NAME,
procedure)));
} catch (JSONException e) {
Log.e(TAG, "JSONException");
}
}
notifyCompletion();
return;
}
}
@Override
public void postTransmit(WampPeer transmitter, WampMessage msg) {
}
@Override
public void preReceive(WampPeer receiver, WampMessage msg) {
}
private void notifyCompletion() {
mListener.onCompletion();
}
@Override
public void postReceive(WampPeer receiver, WampMessage msg) {
if (msg.isWelcomeMessage()) {
for (String topic : mTopics.keySet()) {
String description = mTopics.get(topic);
try {
receiver.transmit(WampMessageFactory.createCall(
WampRequestIdGenerator.getId(),
new JSONObject(),
KadecotProviderClient.Procedure.PUT_TOPIC.getUri(),
new JSONArray(),
new JSONObject().put(KadecotCoreStore.Topics.TopicColumns.NAME,
topic).put(
KadecotCoreStore.Topics.TopicColumns.DESCRIPTION,
description)));
} catch (JSONException e) {
Log.e(TAG, "JSONException");
}
}
for (String procedure : mProcedures.keySet()) {
String description = mProcedures.get(procedure);
try {
receiver.transmit(WampMessageFactory.createCall(
WampRequestIdGenerator.getId(),
new JSONObject(),
KadecotProviderClient.Procedure.PUT_PROCEDURE.getUri(),
new JSONArray(),
new JSONObject().put(KadecotCoreStore.Procedures.ProcedureColumns.NAME,
procedure).put(
KadecotCoreStore.Procedures.ProcedureColumns.DESCRIPTION,
description)));
} catch (JSONException e) {
Log.e(TAG, "JSONException");
}
}
notifyCompletion();
return;
}
}
}