/*
* Copyright (C) 2013-2014 Sony Computer Science Laboratories, Inc. All Rights Reserved.
* Copyright (C) 2014 Sony Corporation. All Rights Reserved.
*/
package com.sonycsl.wamp.role;
import com.sonycsl.wamp.WampPeer;
import com.sonycsl.wamp.message.WampMessage;
import com.sonycsl.wamp.message.WampPublishMessage;
import com.sonycsl.wamp.message.WampPublishedMessage;
import com.sonycsl.wamp.util.DoubleKeyMap;
public class WampPublisher extends WampRole {
private DoubleKeyMap<WampPeer, Integer, WampMessage> mPubs = new DoubleKeyMap<WampPeer, Integer, WampMessage>();
@Override
public final String getRoleName() {
return "publisher";
}
@Override
public boolean resolveTxMessageImpl(WampPeer receiver, WampMessage msg) {
if (!msg.isPublishMessage()) {
return false;
}
mPubs.put(receiver, msg.asPublishMessage().getRequestId(), msg);
return true;
}
@Override
public boolean resolveRxMessageImpl(WampPeer transmitter, WampMessage msg,
OnReplyListener listener) {
if (!msg.isPublishedMessage()) {
return false;
}
WampPublishedMessage publishedMsg = msg.asPublishedMessage();
if (!mPubs.containsKey(transmitter, publishedMsg.getRequestId())) {
return false;
}
WampPublishMessage request = mPubs.get(transmitter, publishedMsg.getRequestId())
.asPublishMessage();
WampPublishedMessage response = msg.asPublishedMessage();
if (request.getRequestId() != response.getRequestId()) {
return false;
}
mPubs.remove(transmitter, publishedMsg.getRequestId());
return true;
}
}