String callID = ((GetVoiceBridgeRequestMessage) message).getCallID();
if (callID != null) {
logger.info("Ending existing call " + callID);
Call call = vm.getCall(callID);
if (call != null) {
try {
call.end(false);
} catch (IOException e) {
logger.info("Unable to end call " + call
+ " " + e.getMessage());
}
} else {
logger.info("Can't find call for " + callID);
}
}
BridgeInfo bridgeInfo;
try {
bridgeInfo = vm.getVoiceBridge();
logger.info("Sending voice bridge info '" + bridgeInfo + "'");
} catch (IOException e) {
logger.warning("unable to get voice bridge: " + e.getMessage());
return;
}
sender.send(clientID, new GetVoiceBridgeResponseMessage(bridgeInfo.toString()));
return;
}
if (message instanceof PlaceCallRequestMessage) {
logger.fine("Got PlaceCallMessage from " + clientID);
placeCall(clientID, (PlaceCallRequestMessage) message);
return;
}
if (message instanceof EndCallMessage) {
EndCallMessage msg = (EndCallMessage) message;
String callID = msg.getCallID();
Call call = vm.getCall(callID);
if (call == null) {
logger.fine("Unable to end call " + callID);
return;
}
try {
vm.endCall(call, true);
} catch (IOException e) {
logger.warning(
"Unable to end call " + call + ": " + e.getMessage());
}
sender.send(new CallEndedMessage(msg.getCallID(), msg.getReason()));
return;
}
if (message instanceof MuteCallRequestMessage) {
MuteCallRequestMessage msg = (MuteCallRequestMessage) message;
String callID = msg.getCallID();
Call call = vm.getCall(callID);
if (call == null) {
logger.info("Unable to mute/unmute call " + callID);
return;
}
try {
call.mute(msg.isMuted());
} catch (IOException e) {
logger.warning("Unable to mute/unmute call " + callID + ": " + e.getMessage());
return;
}
return;
}
if (message instanceof TransferCallRequestMessage) {
TransferCallRequestMessage msg = (TransferCallRequestMessage) message;
String callID = msg.getPresenceInfo().getCallID();
Call call = vm.getCall(callID);
if (call == null) {
if (msg.getCancel() == true) {
return;
}
double x = 0;
double y = 0;
double z = 0;
double orientation = 0;
Player player = vm.getPlayer(callID);
if (player != null) {
x = -player.getX();
y = player.getY();
z = player.getZ();
orientation = player.getOrientation();
}
placeCall(clientID, new PlaceCallRequestMessage(msg.getPresenceInfo(),
msg.getPhoneNumber(), x, y, z, orientation, true));
return;
}
CallParticipant cp = call.getSetup().cp;
if (msg.getCancel() == true) {
try {
call.transfer(cp, true);
} catch (IOException e) {
logger.warning("Unable to cancel call transfer: " + e.getMessage());
}
return;
}
if (msg.getPhoneNumber().equals(cp.getPhoneNumber())) {
sender.send(clientID, new CallMigrateMessage(msg.getPresenceInfo().getCallID(), true));
return;
}
cp.setPhoneNumber(msg.getPhoneNumber());
setJoinConfirmation(cp);
try {
call.transfer(cp, false);
} catch (IOException e) {
logger.warning("Unable to transfer call: " + e.getMessage());
}
return;
}
if (message instanceof AudioVolumeMessage) {
handleAudioVolume(sender, clientID, (AudioVolumeMessage) message);
return;
}
if (message instanceof ChangeUsernameAliasMessage) {
sender.send(message);
return;
}
if (message instanceof VoiceChatMessage) {
VoiceChatHandler.getInstance().processVoiceChatMessage(sender, clientID,
(VoiceChatMessage) message);
return;
}
if (message instanceof PlayTreatmentRequestMessage) {
PlayTreatmentRequestMessage msg = (PlayTreatmentRequestMessage) message;
Call call = vm.getCall(msg.getCallID());
if (call == null) {
logger.warning("No call for " + msg.getCallID());
return;
}
try {
call.playTreatment(msg.getTreatment());
} catch (IOException e) {
logger.warning("Unable to play treatment " + msg.getTreatment()
+ " to call " + call + ": " + e.getMessage());
}
return;