/// <param name=map>An <see cref=OSDMap/> to decode</param>
/// <returns>A strongly typed object containing the decoded information from the capabilities message, or null
/// if no existing Message object exists for the specified event</returns>
public static IMessage DecodeEvent(String eventName, OSDMap map)
{
IMessage message = null;
switch (EventName.valueOf(eventName))
{
case AgentGroupDataUpdate:
message = new AgentGroupDataUpdateMessage(); break;
case AvatarGroupsReply: message = new AgentGroupDataUpdateMessage(); break; // OpenSim sends the above with the wrong? key
case ParcelProperties: message = new ParcelPropertiesMessage(); break;
case ParcelObjectOwnersReply: message = new ParcelObjectOwnersReplyMessage(); break;
case TeleportFinish: message = new TeleportFinishMessage(); break;
case EnableSimulator: message = new EnableSimulatorMessage(); break;
case ParcelPropertiesUpdate: message = new ParcelPropertiesUpdateMessage(); break;
case EstablishAgentCommunication: message = new EstablishAgentCommunicationMessage(); break;
case ChatterBoxInvitation: message = new ChatterBoxInvitationMessage(); break;
case ChatterBoxSessionEventReply: message = new ChatterboxSessionEventReplyMessage(); break;
case ChatterBoxSessionStartReply: message = new ChatterBoxSessionStartReplyMessage(); break;
case ChatterBoxSessionAgentListUpdates: message = new ChatterBoxSessionAgentListUpdatesMessage(); break;
case RequiredVoiceVersion: message = new RequiredVoiceVersionMessage(); break;
case MapLayer: message = new MapLayerMessage(); break;
case ChatSessionRequest: message = new ChatSessionRequestMessage(); break;
case CopyInventoryFromNotecard: message = new CopyInventoryFromNotecardMessage(); break;
case ProvisionVoiceAccountRequest: message = new ProvisionVoiceAccountRequestMessage(); break;
case Viewerstats: message = new ViewerStatsMessage(); break;
case UpdateAgentLanguage: message = new UpdateAgentLanguageMessage(); break;
case RemoteParcelRequest: message = new RemoteParcelRequestMessage(); break;
case UpdateScriptTask: message = new UpdateScriptTaskMessage(); break;
case UpdateScriptAgent: message = new UpdateScriptAgentMessage(); break;
case SendPostcard: message = new SendPostcardMessage(); break;
case UpdateGestureAgentInventory: message = new UpdateGestureAgentInventoryMessage(); break;
case UpdateNotecardAgentInventory: message = new UpdateNotecardAgentInventoryMessage(); break;
case LandStatReply: message = new LandStatReplyMessage(); break;
case ParcelVoiceInfoRequest: message = new ParcelVoiceInfoRequestMessage(); break;
case ViewerStats: message = new ViewerStatsMessage(); break;
case EventQueueGet: message = new EventQueueGetMessage(); break;
case CrossedRegion: message = new CrossedRegionMessage(); break;
case TeleportFailed: message = new TeleportFailedMessage(); break;
case PlacesReply: message = new PlacesReplyMessage(); break;
case UpdateAgentInformation: message = new UpdateAgentInformationMessage(); break;
case DirLandReply: message = new DirLandReplyMessage(); break;
case ScriptRunningReply: message = new ScriptRunningReplyMessage(); break;
case SearchStatRequest: message = new SearchStatRequestMessage(); break;
case AgentDropGroup: message = new AgentDropGroupMessage(); break;
case ForceCloseChatterBoxSession: message = new ForceCloseChatterBoxSessionMessage(); break;
case UploadBakedTexture: message = new UploadBakedTextureMessage(); break;
case RegionInfo: message = new RegionInfoMessage(); break;
case ObjectMediaNavigate: message = new ObjectMediaNavigateMessage(); break;
case ObjectMedia: message = new ObjectMediaMessage(); break;
case AttachmentResources: message = AttachmentResourcesMessage.GetMessageHandler(map); break;
case LandResources: message = LandResourcesMessage.GetMessageHandler(map); break;
case GetDisplayNames: message = new GetDisplayNamesMessage(); break;
case SetDisplayName: message = new SetDisplayNameMessage(); break;
case SetDisplayNameReply: message = new SetDisplayNameReplyMessage(); break;
case DisplayNameUpdate: message = new DisplayNameUpdateMessage(); break;
//case ProductInfoRequest: message = new ProductInfoRequestMessage(); break;
case ObjectPhysicsProperties: message = new ObjectPhysicsPropertiesMessage(); break;
// Capabilities TODO:
// DispatchRegionInfo
// EstateChangeInfo
// EventQueueGet
// FetchInventoryDescendents
// GroupProposalBallot
// MapLayerGod
// NewFileAgentInventory
// RequestTextureDownload
// SearchStatRequest
// SearchStatTracking
// SendUserReport
// SendUserReportWithScreenshot
// ServerReleaseNotes
// StartGroupProposal
// UpdateGestureTaskInventory
// UpdateNotecardTaskInventory
// ViewerStartAuction
// UntrustedSimulatorMessage
}
if (message != null)
{
try
{
message.Deserialize(map);
return message;
}
catch (Exception e)
{
JLogger.warn("Exception while trying to Deserialize" + eventName.toString() + ":" + Utils.getExceptionStackTraceAsString(e));