diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index d347fdc..cc1e71b 100755 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -27,6 +27,7 @@ using System; using System.Collections.Generic; +using System.Collections.Frozen; using System.Net; using System.Reflection; using System.Runtime; @@ -66,6 +67,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// </value> public int DebugPacketLevel { get; set; } + private delegate void StaticPacketMethod(LLClientView cli, Packet packet); + #region Events public event BinaryGenericMessage OnBinaryGenericMessage; @@ -478,7 +481,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// <summary> /// Used to synchronise threads when client is being closed. /// </summary> - public object CloseSyncLock { get;} = new object(); + public readonly object CloseSyncLock = new object(); public bool IsLoggingOut { get; set; } @@ -549,7 +552,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP var myself = userAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, m_agentId); RegisterLocalPacketHandlers(); - string name = string.Format("AsyncInUDP-{0}",m_agentId.ToString()); + string name = $"AsyncInUDP-{m_agentId}"; m_asyncPacketProcess = new JobEngine(name, name, 5000); IsActive = true; @@ -691,6 +694,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// <param name="packetType"></param> /// <param name="handler"></param> /// <returns>true if the handler was added. This is currently always the case.</returns> + [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool AddLocalPacketHandler(PacketType packetType, PacketMethod handler) { return AddLocalPacketHandler(packetType, handler, true); @@ -707,12 +711,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// synchronously. /// </param> /// <returns>true if the handler was added. This is currently always the case.</returns> + [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool AddLocalPacketHandler(PacketType packetType, PacketMethod handler, bool doAsync) { lock (m_packetHandlers) return m_packetHandlers.TryAdd(packetType, new PacketProcessor() { method = handler, Async = doAsync}); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool AddGenericPacketHandler(string MethodName, GenericMessage handler) { MethodName = MethodName.ToLower().Trim(); @@ -727,24 +733,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// <returns>True if a handler was found which successfully processed the packet.</returns> protected bool ProcessPacketMethod(Packet packet) { - if(m_packetHandlers.TryGetValue(packet.Type, out PacketProcessor pprocessor)) + if (m_staticHandlers.TryGetValue(packet.Type, out StaticPacketProcessor spp)) + { + if (spp.Async) + { + Packet lp = packet; + StaticPacketMethod m = spp.method; + LLClientView c = this; + _ = m_asyncPacketProcess.QueueJob(packet.Type.ToString(), () => { m(c,lp); }); + } + else + { + spp.method(this, packet); + } + return true; + } + + if (m_packetHandlers.TryGetValue(packet.Type, out PacketProcessor pprocessor)) { if (pprocessor.Async) { Packet lp = packet; - _ = m_asyncPacketProcess.QueueJob(packet.Type.ToString(), () => - { - try - { - pprocessor.method(lp); - } - catch (Exception e) - { - // Make sure that we see any exception caused by the asynchronous operation. - m_log.Error( - $"[LLCLIENTVIEW]: Caught exception while processing {packet.Type} for {Name}: {e.Message}"); - } - }); + PacketMethod m = pprocessor.method; + _ = m_asyncPacketProcess.QueueJob(packet.Type.ToString(), () => { m(lp); }); } else { @@ -8182,238 +8193,278 @@ namespace OpenSim.Region.ClientStack.LindenUDP #endregion + private static readonly FrozenDictionary<PacketType, StaticPacketProcessor> m_staticHandlers = new SortedDictionary<PacketType, StaticPacketProcessor>() + //private static readonly Dictionary<PacketType, StaticPacketProcessor> m_staticHandlers = new() + { + { PacketType.AgentUpdate, new(HandleAgentUpdate, false) }, + { PacketType.ViewerEffect, new(HandleViewerEffect , false) }, + { PacketType.VelocityInterpolateOn, new(HandleVelocityInterpolateOn, false) }, + { PacketType.VelocityInterpolateOff, new(HandleVelocityInterpolateOff, false) }, + { PacketType.AgentCachedTexture, new(HandleAgentTextureCached, false) }, + { PacketType.MultipleObjectUpdate, new(HandleMultipleObjUpdate, false) }, + { PacketType.MoneyTransferRequest, new(HandleMoneyTransferRequest, false) }, + { PacketType.ParcelBuy, new(HandleParcelBuyRequest, false) }, + { PacketType.RegionHandshakeReply, new(HandlerRegionHandshakeReply, false) }, + { PacketType.SetAlwaysRun, new(HandleSetAlwaysRun, false) }, + { PacketType.AgentAnimation, new(HandleAgentAnimation, false) }, + { PacketType.AgentThrottle, new(HandleAgentThrottle, false) }, + { PacketType.AgentPause, new(HandleAgentPause, false) }, + { PacketType.AgentResume, new(HandleAgentResume, false) }, + { PacketType.ObjectImage, new(HandleObjectImage, false) }, + { PacketType.ObjectGrab, new(HandleObjectGrab, false) }, + { PacketType.ObjectGrabUpdate, new(HandleObjectGrabUpdate, false) }, + { PacketType.ObjectSpinStart, new(HandleObjectSpinStart, false) }, + { PacketType.ObjectSpinUpdate, new(HandleObjectSpinUpdate, false) }, + { PacketType.ObjectSpinStop, new(HandleObjectSpinStop, false) }, + { PacketType.ObjectDescription, new(HandleObjectDescription, false) }, + { PacketType.ObjectName, new(HandleObjectName, false) }, + { PacketType.ObjectPermissions, new(HandleObjectPermissions, false) }, + { PacketType.Undo, new(HandleUndo, false) }, + { PacketType.UndoLand, new(HandleLandUndo, false) }, + { PacketType.Redo, new(HandleRedo, false) }, + { PacketType.RequestObjectPropertiesFamily, new(HandleRequestObjectPropertiesFamily, false) }, + { PacketType.ScriptAnswerYes, new(HandleScriptAnswerYes, false) }, + { PacketType.ObjectClickAction, new(HandleObjectClickAction, false) }, + { PacketType.ObjectMaterial, new(HandleObjectMaterial, false) }, + { PacketType.RequestImage, new(HandleRequestImage, false) }, + { PacketType.TransferRequest, new(HandleTransferRequest, false) }, + { PacketType.ConfirmXferPacket, new(HandleConfirmXferPacket, false) }, + { PacketType.UUIDNameRequest, new(HandleUUIDNameRequest, false) }, + { PacketType.RegionHandleRequest, new(HandleRegionHandleRequest, false) }, + { PacketType.ParcelAccessListRequest, new(HandleParcelAccessListRequest, false) }, + { PacketType.ParcelAccessListUpdate, new(HandleParcelAccessListUpdate, false) }, + { PacketType.ParcelPropertiesRequest, new(HandleParcelPropertiesRequest, false) }, + { PacketType.RequestRegionInfo, new(HandleRequestRegionInfo, false) }, + { PacketType.AgentFOV, new(HandleAgentFOV, false) }, + { PacketType.MapItemRequest, new(HandleMapItemRequest, false) }, + { PacketType.TransferAbort, new(HandleTransferAbort, false) }, + { PacketType.AgentHeightWidth, new(HandleAgentHeightWidth, false) }, + + { PacketType.LogoutRequest, new(HandleLogout, true) }, + { PacketType.UUIDGroupNameRequest, new(HandleUUIDGroupNameRequest, true) }, + { PacketType.ObjectGroup, new(HandleObjectGroupRequest, true) }, + { PacketType.GenericMessage, new(HandleGenericMessage, true) }, + + { PacketType.MuteListRequest, new(HandleMuteListRequest, false) }, + { PacketType.UpdateMuteListEntry, new(HandleUpdateMuteListEntry, true) }, + { PacketType.RemoveMuteListEntry, new(HandleRemoveMuteListEntry, true) }, + + { PacketType.AvatarPropertiesRequest, new(HandleAvatarPropertiesRequest, true) }, + { PacketType.ChatFromViewer, new(HandleChatFromViewer, true) }, + { PacketType.AvatarPropertiesUpdate, new(HandlerAvatarPropertiesUpdate, true) }, + { PacketType.ScriptDialogReply, new(HandlerScriptDialogReply, true) }, + { PacketType.ImprovedInstantMessage, new(HandlerImprovedInstantMessage, true) }, + { PacketType.AcceptFriendship, new(HandlerAcceptFriendship, true) }, + { PacketType.DeclineFriendship, new(HandlerDeclineFriendship, true) }, + { PacketType.TerminateFriendship, new(HandlerTerminateFriendship, true) }, + { PacketType.RezObject, new(HandlerRezObject, true) }, + { PacketType.DeRezObject, new(HandlerDeRezObject, true) }, + { PacketType.RezRestoreToWorld, new(HandlerRezRestoreToWorld, true) }, + { PacketType.ModifyLand, new(HandlerModifyLand, true) }, + { PacketType.AgentWearablesRequest, new(HandlerAgentWearablesRequest, true) }, + { PacketType.AgentSetAppearance, new(HandlerAgentSetAppearance, true) }, + { PacketType.AgentIsNowWearing, new(HandlerAgentIsNowWearing, true) }, + { PacketType.RezSingleAttachmentFromInv, new(HandlerRezSingleAttachmentFromInv, true) }, + { PacketType.RezMultipleAttachmentsFromInv, new(HandleRezMultipleAttachmentsFromInv, true) }, + { PacketType.DetachAttachmentIntoInv, new(HandleDetachAttachmentIntoInv, true) }, + { PacketType.ObjectAttach, new(HandleObjectAttach, true) }, + { PacketType.ObjectDetach, new(HandleObjectDetach, true) }, + { PacketType.ObjectDrop, new(HandleObjectDrop, true) }, + { PacketType.CompleteAgentMovement, new(HandleCompleteAgentMovement, true) }, + { PacketType.AgentRequestSit, new(HandleAgentRequestSit, true) }, + { PacketType.AgentSit, new(HandleAgentSit, true) }, + { PacketType.SoundTrigger, new(HandleSoundTrigger, true) }, + { PacketType.AvatarPickerRequest, new(HandleAvatarPickerRequest, true) }, + { PacketType.AgentDataUpdateRequest, new(HandleAgentDataUpdateRequest, true) }, + { PacketType.UserInfoRequest, new(HandleUserInfoRequest, true) }, + { PacketType.UpdateUserInfo, new(HandleUpdateUserInfo, true) }, + { PacketType.SetStartLocationRequest, new(HandleSetStartLocationRequest, true) }, + { PacketType.ForceScriptControlRelease, new(HandleForceScriptControlRelease, true) }, + { PacketType.ObjectLink, new(HandleObjectLink, true) }, + { PacketType.ObjectDelink, new(HandleObjectDelink, true) }, + { PacketType.ObjectAdd, new(HandleObjectAdd, true) }, + { PacketType.ObjectShape, new(HandleObjectShape, true) }, + { PacketType.ObjectExtraParams, new(HandleObjectExtraParams, true) }, + { PacketType.ObjectDuplicate, new(HandleObjectDuplicate, true) }, + { PacketType.RequestMultipleObjects, new(HandleRequestMultipleObjects, true) }, + { PacketType.ObjectSelect, new(HandleObjectSelect, true) }, + { PacketType.ObjectDeselect, new(HandleObjectDeselect, true) }, + { PacketType.ObjectPosition, new(HandleObjectPosition, true) }, + { PacketType.ObjectScale, new(HandleObjectScale, true) }, + { PacketType.ObjectRotation, new(HandleObjectRotation, true) }, + { PacketType.ObjectFlagUpdate, new(HandleObjectFlagUpdate, true) }, + { PacketType.ObjectDeGrab, new(HandleObjectDeGrab, true) }, + { PacketType.ObjectDuplicateOnRay, new(HandleObjectDuplicateOnRay, true) }, + { PacketType.ObjectIncludeInSearch, new(HandleObjectIncludeInSearch, true) }, + { PacketType.AssetUploadRequest, new(HandleAssetUploadRequest, true) }, + { PacketType.RequestXfer, new(HandleRequestXfer, true) }, + { PacketType.SendXferPacket, new(HandleSendXferPacket, true) }, + { PacketType.AbortXfer, new(HandleAbortXfer, true) }, + + { PacketType.CreateInventoryFolder, new (HandleCreateInventoryFolder, true) }, + { PacketType.UpdateInventoryFolder, new(HandleUpdateInventoryFolder, true) }, + { PacketType.MoveInventoryFolder, new(HandleMoveInventoryFolder, true) }, + { PacketType.CreateInventoryItem, new(HandleCreateInventoryItem, true) }, + { PacketType.LinkInventoryItem, new(HandleLinkInventoryItem, true) }, + { PacketType.FetchInventory, new(HandleFetchInventory, true) }, + { PacketType.FetchInventoryDescendents, new(HandleFetchInventoryDescendents, true) }, + { PacketType.InventoryDescendents, new (HandleInventoryDescendents, true) }, + { PacketType.PurgeInventoryDescendents, new(HandlePurgeInventoryDescendents, true) }, + { PacketType.UpdateInventoryItem, new(HandleUpdateInventoryItem, true) }, + { PacketType.CopyInventoryItem, new(HandleCopyInventoryItem, true) }, + { PacketType.MoveInventoryItem, new(HandleMoveInventoryItem, true) }, + { PacketType.RemoveInventoryItem, new(HandleRemoveInventoryItem, true) }, + { PacketType.RemoveInventoryFolder, new(HandleRemoveInventoryFolder, true) }, + { PacketType.RemoveInventoryObjects, new(HandleRemoveInventoryObjects, true) }, + + { PacketType.RequestTaskInventory, new(HandleRequestTaskInventory, true) }, + { PacketType.UpdateTaskInventory, new(HandleUpdateTaskInventory, true) }, + { PacketType.RemoveTaskInventory, new(HandleRemoveTaskInventory, true) }, + { PacketType.MoveTaskInventory, new(HandleMoveTaskInventory, true) }, + + { PacketType.RezScript, new(HandleRezScript, true) }, + + { PacketType.MapLayerRequest, new(HandleMapLayerRequest, true) }, + { PacketType.MapBlockRequest, new(HandleMapBlockRequest, true) }, + { PacketType.MapNameRequest, new(HandleMapNameRequest, true) }, + + { PacketType.TeleportLandmarkRequest, new(HandleTeleportLandmarkRequest, true) }, + { PacketType.TeleportCancel, new(HandleTeleportCancel, true) }, + { PacketType.TeleportLocationRequest, new(HandleTeleportLocationRequest, true) }, + + { PacketType.ParcelInfoRequest, new (HandleParcelInfoRequest, true) }, + { PacketType.ParcelDivide, new(HandleParcelDivide, true) }, + { PacketType.ParcelJoin, new(HandleParcelJoin, true) }, + { PacketType.ParcelPropertiesUpdate, new(HandleParcelPropertiesUpdate, true) }, + { PacketType.ParcelSelectObjects, new(HandleParcelSelectObjects, true) }, + { PacketType.ParcelObjectOwnersRequest, new(HandleParcelObjectOwnersRequest, true) }, + { PacketType.ParcelGodForceOwner, new(HandleParcelGodForceOwner, true) }, + { PacketType.ParcelRelease, new(HandleParcelRelease, true) }, + { PacketType.ParcelReclaim, new(HandleParcelReclaim, true) }, + { PacketType.ParcelReturnObjects, new(HandleParcelReturnObjects, true) }, + { PacketType.ParcelSetOtherCleanTime, new(HandleParcelSetOtherCleanTime, true) }, + { PacketType.ParcelDeedToGroup, new (HandleParcelDeedToGroup, true) }, + + { PacketType.LandStatRequest, new(HandleLandStatRequest, true) }, + { PacketType.ParcelDwellRequest, new(HandleParcelDwellRequest, true) }, + + { PacketType.EstateOwnerMessage, new(HandleEstateOwnerMessage, true) }, + { PacketType.EstateCovenantRequest, new(HandleEstateCovenantRequest, true) }, + + { PacketType.RequestGodlikePowers, new(HandleRequestGodlikePowers, true) }, + { PacketType.GodKickUser, new(HandleGodKickUser, true) }, + + { PacketType.MoneyBalanceRequest, new(HandleMoneyBalanceRequest, true) }, + { PacketType.EconomyDataRequest, new(HandleEconomyDataRequest, true) }, + { PacketType.RequestPayPrice, new(HandleRequestPayPrice, true) }, + { PacketType.ObjectSaleInfo, new(HandleObjectSaleInfo, true) }, + { PacketType.ObjectBuy, new(HandleObjectBuy, true) }, + + { PacketType.GetScriptRunning, new(HandleGetScriptRunning, true) }, + { PacketType.SetScriptRunning, new(HandleSetScriptRunning, true) }, + { PacketType.ScriptReset, new(HandleScriptReset, true) }, + + { PacketType.ActivateGestures, new(HandleActivateGestures, true) }, + { PacketType.DeactivateGestures, new(HandleDeactivateGestures, true) }, + + { PacketType.ObjectOwner, new(HandleObjectOwner, true) }, + + { PacketType.ViewerStats, new(HandleViewerStats, true) }, + + { PacketType.UseCircuitCode, new(HandleUseCircuitCode, true) }, + + { PacketType.CreateNewOutfitAttachments, new(HandleCreateNewOutfitAttachments, true) }, + + { PacketType.DirFindQuery, new(HandleDirFindQuery, true) }, + { PacketType.DirPlacesQuery, new(HandleDirPlacesQuery, true) }, + { PacketType.DirClassifiedQuery, new(HandleDirClassifiedQuery, true) }, + { PacketType.DirLandQuery, new(HandleDirLandQuery, true) }, + { PacketType.DirPopularQuery, new(HandleDirPopularQuery, true) }, + + { PacketType.EventInfoRequest, new(HandleEventInfoRequest, true) }, + + { PacketType.OfferCallingCard, new(HandleOfferCallingCard, true) }, + { PacketType.AcceptCallingCard, new(HandleAcceptCallingCard, true) }, + { PacketType.DeclineCallingCard, new(HandleDeclineCallingCard, true) }, + + { PacketType.ActivateGroup, new(HandleActivateGroup, true) }, + { PacketType.GroupTitlesRequest, new(HandleGroupTitlesRequest, true) }, + { PacketType.GroupProfileRequest, new(HandleGroupProfileRequest, true) }, + { PacketType.GroupMembersRequest, new(HandleGroupMembersRequest, true) }, + { PacketType.GroupRoleDataRequest, new(HandleGroupRoleDataRequest, true) }, + { PacketType.GroupRoleMembersRequest, new(HandleGroupRoleMembersRequest, true) }, + { PacketType.CreateGroupRequest, new(HandleCreateGroupRequest, true) }, + { PacketType.UpdateGroupInfo, new(HandleUpdateGroupInfo, true) }, + { PacketType.SetGroupAcceptNotices, new(HandleSetGroupAcceptNotices, true) }, + { PacketType.GroupTitleUpdate, new(HandleGroupTitleUpdate, true) }, + + { PacketType.GroupNoticesListRequest, new(HandleGroupNoticesListRequest, true) }, + { PacketType.GroupNoticeRequest, new(HandleGroupNoticeRequest, true) }, + + { PacketType.GroupRoleChanges, new(HandleGroupRoleChanges, true) }, + + { PacketType.JoinGroupRequest, new(HandleJoinGroupRequest, true) }, + { PacketType.LeaveGroupRequest, new(HandleLeaveGroupRequest, true) }, + { PacketType.EjectGroupMemberRequest, new(HandleEjectGroupMemberRequest, true) }, + { PacketType.InviteGroupRequest, new(HandleInviteGroupRequest, true) }, + + { PacketType.GroupAccountDetailsRequest, new(HandleGroupAccountDetailsRequest, true) }, + { PacketType.GroupAccountSummaryRequest, new(HandleGroupAccountSummaryRequest, true) }, + { PacketType.GroupAccountTransactionsRequest, new(HandleGroupTransactionsDetailsRequest, true) }, + + { PacketType.GroupActiveProposalsRequest, new(HandleGroupActiveProposalsRequest, true) }, + { PacketType.GroupVoteHistoryRequest, new(HandleGroupVoteHistoryRequest, true) }, + + { PacketType.StartLure, new(HandleStartLure, true) }, + { PacketType.TeleportLureRequest, new(HandleTeleportLureRequest, true) }, + + { PacketType.ClassifiedInfoRequest, new(HandleClassifiedInfoRequest, true) }, + { PacketType.ClassifiedInfoUpdate, new(HandleClassifiedInfoUpdate, true) }, + { PacketType.ClassifiedDelete, new(HandleClassifiedDelete, true) }, + { PacketType.ClassifiedGodDelete, new(HandleClassifiedGodDelete, true) }, + + { PacketType.EventGodDelete, new(HandleEventGodDelete, true) }, + { PacketType.EventNotificationAddRequest, new(HandleEventNotificationAddRequest, true) }, + { PacketType.EventNotificationRemoveRequest, new(HandleEventNotificationRemoveRequest, true) }, + + { PacketType.RetrieveInstantMessages, new(HandleRetrieveInstantMessages, true) }, + + { PacketType.PickDelete, new(HandlePickDelete, true) }, + { PacketType.PickGodDelete, new(HandlePickGodDelete, true) }, + { PacketType.PickInfoUpdate, new(HandlePickInfoUpdate, true) }, + + { PacketType.AvatarNotesUpdate, new(HandleAvatarNotesUpdate, true) }, + { PacketType.AvatarInterestsUpdate, new(HandleAvatarInterestsUpdate, true) }, + + { PacketType.GrantUserRights, new(HandleGrantUserRights, true) }, + + { PacketType.PlacesQuery, new(HandlePlacesQuery, true) }, + + { PacketType.UserReport, new(HandleUserReport, true) }, + { PacketType.FindAgent, new(HandleFindAgent, true) }, + { PacketType.TrackAgent, new(HandleTrackAgent, true) }, + + { PacketType.GodUpdateRegionInfo, new(HandleGodUpdateRegionInfoUpdate, true) }, + { PacketType.GodlikeMessage, new(HandleGodlikeMessage, true) }, + + { PacketType.StateSave, new(HandleSaveStatePacket, true) }, + + { PacketType.RevokePermissions, new(HandleRevokePermissions, true) }, + + { PacketType.FreezeUser, new(HandleFreezeUser, true) }, + { PacketType.EjectUser, new(HandleEjectUser, true) }, + + { PacketType.ParcelBuyPass, new(HandleParcelBuyPass, true) }, + { PacketType.ParcelGodMarkAsContent, new(HandleParcelGodMarkAsContent, true) }, + { PacketType.SimWideDeletes, new(HandleSimWideDeletes, true) }, + { PacketType.SendPostcard, new(HandleSendPostcard, true) }, + { PacketType.ChangeInventoryItemFlags, new(HandleChangeInventoryItemFlags, true) }, + + }.ToFrozenDictionary(); + //}; + protected virtual void RegisterLocalPacketHandlers() { - AddLocalPacketHandler(PacketType.LogoutRequest, HandleLogout); - - // If AgentUpdate is ever handled asynchronously, then we will also need to construct a new AgentUpdateArgs - // for each AgentUpdate packet. - AddLocalPacketHandler(PacketType.AgentUpdate, HandleAgentUpdate, false); - - AddLocalPacketHandler(PacketType.ViewerEffect, HandleViewerEffect, false); - AddLocalPacketHandler(PacketType.VelocityInterpolateOff, HandleVelocityInterpolateOff, false); - AddLocalPacketHandler(PacketType.VelocityInterpolateOn, HandleVelocityInterpolateOn, false); - AddLocalPacketHandler(PacketType.AgentCachedTexture, HandleAgentTextureCached, false); - AddLocalPacketHandler(PacketType.MultipleObjectUpdate, HandleMultipleObjUpdate, false); - AddLocalPacketHandler(PacketType.MoneyTransferRequest, HandleMoneyTransferRequest, false); - AddLocalPacketHandler(PacketType.ParcelBuy, HandleParcelBuyRequest, false); - AddLocalPacketHandler(PacketType.UUIDGroupNameRequest, HandleUUIDGroupNameRequest); - AddLocalPacketHandler(PacketType.ObjectGroup, HandleObjectGroupRequest); - AddLocalPacketHandler(PacketType.GenericMessage, HandleGenericMessage); - AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest); - AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer); - AddLocalPacketHandler(PacketType.AvatarPropertiesUpdate, HandlerAvatarPropertiesUpdate); - AddLocalPacketHandler(PacketType.ScriptDialogReply, HandlerScriptDialogReply); - AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage); - AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship); - AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship); - AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFriendship); - AddLocalPacketHandler(PacketType.RezObject, HandlerRezObject); - AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject); - AddLocalPacketHandler(PacketType.RezRestoreToWorld, HandlerRezRestoreToWorld); - AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand); - AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, false); - AddLocalPacketHandler(PacketType.AgentWearablesRequest, HandlerAgentWearablesRequest); - AddLocalPacketHandler(PacketType.AgentSetAppearance, HandlerAgentSetAppearance); - AddLocalPacketHandler(PacketType.AgentIsNowWearing, HandlerAgentIsNowWearing); - AddLocalPacketHandler(PacketType.RezSingleAttachmentFromInv, HandlerRezSingleAttachmentFromInv); - AddLocalPacketHandler(PacketType.RezMultipleAttachmentsFromInv, HandleRezMultipleAttachmentsFromInv); - AddLocalPacketHandler(PacketType.DetachAttachmentIntoInv, HandleDetachAttachmentIntoInv); - AddLocalPacketHandler(PacketType.ObjectAttach, HandleObjectAttach); - AddLocalPacketHandler(PacketType.ObjectDetach, HandleObjectDetach); - AddLocalPacketHandler(PacketType.ObjectDrop, HandleObjectDrop); - AddLocalPacketHandler(PacketType.SetAlwaysRun, HandleSetAlwaysRun, false); - AddLocalPacketHandler(PacketType.CompleteAgentMovement, HandleCompleteAgentMovement); - AddLocalPacketHandler(PacketType.AgentAnimation, HandleAgentAnimation, false); - AddLocalPacketHandler(PacketType.AgentRequestSit, HandleAgentRequestSit); - AddLocalPacketHandler(PacketType.AgentSit, HandleAgentSit); - AddLocalPacketHandler(PacketType.SoundTrigger, HandleSoundTrigger); - AddLocalPacketHandler(PacketType.AvatarPickerRequest, HandleAvatarPickerRequest); - AddLocalPacketHandler(PacketType.AgentDataUpdateRequest, HandleAgentDataUpdateRequest); - AddLocalPacketHandler(PacketType.UserInfoRequest, HandleUserInfoRequest); - AddLocalPacketHandler(PacketType.UpdateUserInfo, HandleUpdateUserInfo); - AddLocalPacketHandler(PacketType.SetStartLocationRequest, HandleSetStartLocationRequest); - AddLocalPacketHandler(PacketType.AgentThrottle, HandleAgentThrottle, false); - AddLocalPacketHandler(PacketType.AgentPause, HandleAgentPause, false); - AddLocalPacketHandler(PacketType.AgentResume, HandleAgentResume, false); - AddLocalPacketHandler(PacketType.ForceScriptControlRelease, HandleForceScriptControlRelease); - AddLocalPacketHandler(PacketType.ObjectLink, HandleObjectLink); - AddLocalPacketHandler(PacketType.ObjectDelink, HandleObjectDelink); - AddLocalPacketHandler(PacketType.ObjectAdd, HandleObjectAdd); - AddLocalPacketHandler(PacketType.ObjectShape, HandleObjectShape); - AddLocalPacketHandler(PacketType.ObjectExtraParams, HandleObjectExtraParams); - AddLocalPacketHandler(PacketType.ObjectDuplicate, HandleObjectDuplicate); - AddLocalPacketHandler(PacketType.RequestMultipleObjects, HandleRequestMultipleObjects); - AddLocalPacketHandler(PacketType.ObjectSelect, HandleObjectSelect); - AddLocalPacketHandler(PacketType.ObjectDeselect, HandleObjectDeselect); - AddLocalPacketHandler(PacketType.ObjectPosition, HandleObjectPosition); - AddLocalPacketHandler(PacketType.ObjectScale, HandleObjectScale); - AddLocalPacketHandler(PacketType.ObjectRotation, HandleObjectRotation); - AddLocalPacketHandler(PacketType.ObjectFlagUpdate, HandleObjectFlagUpdate); - - // Handle ObjectImage (TextureEntry) updates synchronously, since when updating multiple prim faces at once, - // some clients will send out a separate ObjectImage packet for each face - AddLocalPacketHandler(PacketType.ObjectImage, HandleObjectImage, false); - - AddLocalPacketHandler(PacketType.ObjectGrab, HandleObjectGrab, false); - AddLocalPacketHandler(PacketType.ObjectGrabUpdate, HandleObjectGrabUpdate, false); - AddLocalPacketHandler(PacketType.ObjectDeGrab, HandleObjectDeGrab); - AddLocalPacketHandler(PacketType.ObjectSpinStart, HandleObjectSpinStart, false); - AddLocalPacketHandler(PacketType.ObjectSpinUpdate, HandleObjectSpinUpdate, false); - AddLocalPacketHandler(PacketType.ObjectSpinStop, HandleObjectSpinStop, false); - AddLocalPacketHandler(PacketType.ObjectDescription, HandleObjectDescription, false); - AddLocalPacketHandler(PacketType.ObjectName, HandleObjectName, false); - AddLocalPacketHandler(PacketType.ObjectPermissions, HandleObjectPermissions, false); - AddLocalPacketHandler(PacketType.Undo, HandleUndo, false); - AddLocalPacketHandler(PacketType.UndoLand, HandleLandUndo, false); - AddLocalPacketHandler(PacketType.Redo, HandleRedo, false); - AddLocalPacketHandler(PacketType.ObjectDuplicateOnRay, HandleObjectDuplicateOnRay); - AddLocalPacketHandler(PacketType.RequestObjectPropertiesFamily, HandleRequestObjectPropertiesFamily, false); - AddLocalPacketHandler(PacketType.ObjectIncludeInSearch, HandleObjectIncludeInSearch); - AddLocalPacketHandler(PacketType.ScriptAnswerYes, HandleScriptAnswerYes, false); - AddLocalPacketHandler(PacketType.ObjectClickAction, HandleObjectClickAction, false); - AddLocalPacketHandler(PacketType.ObjectMaterial, HandleObjectMaterial, false); - AddLocalPacketHandler(PacketType.RequestImage, HandleRequestImage, false); - AddLocalPacketHandler(PacketType.TransferRequest, HandleTransferRequest, false); - AddLocalPacketHandler(PacketType.AssetUploadRequest, HandleAssetUploadRequest); - AddLocalPacketHandler(PacketType.RequestXfer, HandleRequestXfer); - AddLocalPacketHandler(PacketType.SendXferPacket, HandleSendXferPacket); - AddLocalPacketHandler(PacketType.ConfirmXferPacket, HandleConfirmXferPacket, false); - AddLocalPacketHandler(PacketType.AbortXfer, HandleAbortXfer); - AddLocalPacketHandler(PacketType.CreateInventoryFolder, HandleCreateInventoryFolder); - AddLocalPacketHandler(PacketType.UpdateInventoryFolder, HandleUpdateInventoryFolder); - AddLocalPacketHandler(PacketType.MoveInventoryFolder, HandleMoveInventoryFolder); - AddLocalPacketHandler(PacketType.CreateInventoryItem, HandleCreateInventoryItem); - AddLocalPacketHandler(PacketType.LinkInventoryItem, HandleLinkInventoryItem); - AddLocalPacketHandler(PacketType.FetchInventory, HandleFetchInventory); - AddLocalPacketHandler(PacketType.FetchInventoryDescendents, HandleFetchInventoryDescendents); - AddLocalPacketHandler(PacketType.PurgeInventoryDescendents, HandlePurgeInventoryDescendents); - AddLocalPacketHandler(PacketType.UpdateInventoryItem, HandleUpdateInventoryItem); - AddLocalPacketHandler(PacketType.CopyInventoryItem, HandleCopyInventoryItem); - AddLocalPacketHandler(PacketType.MoveInventoryItem, HandleMoveInventoryItem); - AddLocalPacketHandler(PacketType.RemoveInventoryItem, HandleRemoveInventoryItem); - AddLocalPacketHandler(PacketType.RemoveInventoryFolder, HandleRemoveInventoryFolder); - AddLocalPacketHandler(PacketType.RemoveInventoryObjects, HandleRemoveInventoryObjects); - AddLocalPacketHandler(PacketType.RequestTaskInventory, HandleRequestTaskInventory); - AddLocalPacketHandler(PacketType.UpdateTaskInventory, HandleUpdateTaskInventory); - AddLocalPacketHandler(PacketType.RemoveTaskInventory, HandleRemoveTaskInventory); - AddLocalPacketHandler(PacketType.MoveTaskInventory, HandleMoveTaskInventory); - AddLocalPacketHandler(PacketType.RezScript, HandleRezScript); - AddLocalPacketHandler(PacketType.MapLayerRequest, HandleMapLayerRequest); - AddLocalPacketHandler(PacketType.MapBlockRequest, HandleMapBlockRequest); - AddLocalPacketHandler(PacketType.MapNameRequest, HandleMapNameRequest); - AddLocalPacketHandler(PacketType.TeleportLandmarkRequest, HandleTeleportLandmarkRequest); - AddLocalPacketHandler(PacketType.TeleportCancel, HandleTeleportCancel); - AddLocalPacketHandler(PacketType.TeleportLocationRequest, HandleTeleportLocationRequest); - AddLocalPacketHandler(PacketType.UUIDNameRequest, HandleUUIDNameRequest, false); - AddLocalPacketHandler(PacketType.RegionHandleRequest, HandleRegionHandleRequest, false); - AddLocalPacketHandler(PacketType.ParcelInfoRequest, HandleParcelInfoRequest); - AddLocalPacketHandler(PacketType.ParcelAccessListRequest, HandleParcelAccessListRequest, false); - AddLocalPacketHandler(PacketType.ParcelAccessListUpdate, HandleParcelAccessListUpdate, false); - AddLocalPacketHandler(PacketType.ParcelPropertiesRequest, HandleParcelPropertiesRequest, false); - AddLocalPacketHandler(PacketType.ParcelDivide, HandleParcelDivide); - AddLocalPacketHandler(PacketType.ParcelJoin, HandleParcelJoin); - AddLocalPacketHandler(PacketType.ParcelPropertiesUpdate, HandleParcelPropertiesUpdate); - AddLocalPacketHandler(PacketType.ParcelSelectObjects, HandleParcelSelectObjects); - AddLocalPacketHandler(PacketType.ParcelObjectOwnersRequest, HandleParcelObjectOwnersRequest); - AddLocalPacketHandler(PacketType.ParcelGodForceOwner, HandleParcelGodForceOwner); - AddLocalPacketHandler(PacketType.ParcelRelease, HandleParcelRelease); - AddLocalPacketHandler(PacketType.ParcelReclaim, HandleParcelReclaim); - AddLocalPacketHandler(PacketType.ParcelReturnObjects, HandleParcelReturnObjects); - AddLocalPacketHandler(PacketType.ParcelSetOtherCleanTime, HandleParcelSetOtherCleanTime); - AddLocalPacketHandler(PacketType.LandStatRequest, HandleLandStatRequest); - AddLocalPacketHandler(PacketType.ParcelDwellRequest, HandleParcelDwellRequest); - AddLocalPacketHandler(PacketType.EstateOwnerMessage, HandleEstateOwnerMessage); - AddLocalPacketHandler(PacketType.RequestRegionInfo, HandleRequestRegionInfo, false); - AddLocalPacketHandler(PacketType.EstateCovenantRequest, HandleEstateCovenantRequest); - AddLocalPacketHandler(PacketType.RequestGodlikePowers, HandleRequestGodlikePowers); - AddLocalPacketHandler(PacketType.GodKickUser, HandleGodKickUser); - AddLocalPacketHandler(PacketType.MoneyBalanceRequest, HandleMoneyBalanceRequest); - AddLocalPacketHandler(PacketType.EconomyDataRequest, HandleEconomyDataRequest); - AddLocalPacketHandler(PacketType.RequestPayPrice, HandleRequestPayPrice); - AddLocalPacketHandler(PacketType.ObjectSaleInfo, HandleObjectSaleInfo); - AddLocalPacketHandler(PacketType.ObjectBuy, HandleObjectBuy); - AddLocalPacketHandler(PacketType.GetScriptRunning, HandleGetScriptRunning); - AddLocalPacketHandler(PacketType.SetScriptRunning, HandleSetScriptRunning); - AddLocalPacketHandler(PacketType.ScriptReset, HandleScriptReset); - AddLocalPacketHandler(PacketType.ActivateGestures, HandleActivateGestures); - AddLocalPacketHandler(PacketType.DeactivateGestures, HandleDeactivateGestures); - AddLocalPacketHandler(PacketType.ObjectOwner, HandleObjectOwner); - AddLocalPacketHandler(PacketType.AgentFOV, HandleAgentFOV, false); - AddLocalPacketHandler(PacketType.ViewerStats, HandleViewerStats); - AddLocalPacketHandler(PacketType.MapItemRequest, HandleMapItemRequest, false); - AddLocalPacketHandler(PacketType.TransferAbort, HandleTransferAbort, false); - AddLocalPacketHandler(PacketType.MuteListRequest, HandleMuteListRequest, false); - AddLocalPacketHandler(PacketType.UseCircuitCode, HandleUseCircuitCode); - AddLocalPacketHandler(PacketType.CreateNewOutfitAttachments, HandleCreateNewOutfitAttachments); - AddLocalPacketHandler(PacketType.AgentHeightWidth, HandleAgentHeightWidth, false); - AddLocalPacketHandler(PacketType.InventoryDescendents, HandleInventoryDescendents); - AddLocalPacketHandler(PacketType.DirPlacesQuery, HandleDirPlacesQuery); - AddLocalPacketHandler(PacketType.DirFindQuery, HandleDirFindQuery); - AddLocalPacketHandler(PacketType.DirLandQuery, HandleDirLandQuery); - AddLocalPacketHandler(PacketType.DirPopularQuery, HandleDirPopularQuery); - AddLocalPacketHandler(PacketType.DirClassifiedQuery, HandleDirClassifiedQuery); - AddLocalPacketHandler(PacketType.EventInfoRequest, HandleEventInfoRequest); - AddLocalPacketHandler(PacketType.OfferCallingCard, HandleOfferCallingCard); - AddLocalPacketHandler(PacketType.AcceptCallingCard, HandleAcceptCallingCard); - AddLocalPacketHandler(PacketType.DeclineCallingCard, HandleDeclineCallingCard); - AddLocalPacketHandler(PacketType.ActivateGroup, HandleActivateGroup); - AddLocalPacketHandler(PacketType.GroupTitlesRequest, HandleGroupTitlesRequest); - AddLocalPacketHandler(PacketType.GroupProfileRequest, HandleGroupProfileRequest); - AddLocalPacketHandler(PacketType.GroupMembersRequest, HandleGroupMembersRequest); - AddLocalPacketHandler(PacketType.GroupRoleDataRequest, HandleGroupRoleDataRequest); - AddLocalPacketHandler(PacketType.GroupRoleMembersRequest, HandleGroupRoleMembersRequest); - AddLocalPacketHandler(PacketType.CreateGroupRequest, HandleCreateGroupRequest); - AddLocalPacketHandler(PacketType.UpdateGroupInfo, HandleUpdateGroupInfo); - AddLocalPacketHandler(PacketType.SetGroupAcceptNotices, HandleSetGroupAcceptNotices); - AddLocalPacketHandler(PacketType.GroupTitleUpdate, HandleGroupTitleUpdate); - AddLocalPacketHandler(PacketType.ParcelDeedToGroup, HandleParcelDeedToGroup); - AddLocalPacketHandler(PacketType.GroupNoticesListRequest, HandleGroupNoticesListRequest); - AddLocalPacketHandler(PacketType.GroupNoticeRequest, HandleGroupNoticeRequest); - AddLocalPacketHandler(PacketType.GroupRoleUpdate, HandleGroupRoleUpdate); - AddLocalPacketHandler(PacketType.GroupRoleChanges, HandleGroupRoleChanges); - AddLocalPacketHandler(PacketType.JoinGroupRequest, HandleJoinGroupRequest); - AddLocalPacketHandler(PacketType.LeaveGroupRequest, HandleLeaveGroupRequest); - AddLocalPacketHandler(PacketType.EjectGroupMemberRequest, HandleEjectGroupMemberRequest); - AddLocalPacketHandler(PacketType.InviteGroupRequest, HandleInviteGroupRequest); - AddLocalPacketHandler(PacketType.StartLure, HandleStartLure); - AddLocalPacketHandler(PacketType.TeleportLureRequest, HandleTeleportLureRequest); - AddLocalPacketHandler(PacketType.ClassifiedInfoRequest, HandleClassifiedInfoRequest); - AddLocalPacketHandler(PacketType.ClassifiedInfoUpdate, HandleClassifiedInfoUpdate); - AddLocalPacketHandler(PacketType.ClassifiedDelete, HandleClassifiedDelete); - AddLocalPacketHandler(PacketType.ClassifiedGodDelete, HandleClassifiedGodDelete); - AddLocalPacketHandler(PacketType.EventGodDelete, HandleEventGodDelete); - AddLocalPacketHandler(PacketType.EventNotificationAddRequest, HandleEventNotificationAddRequest); - AddLocalPacketHandler(PacketType.EventNotificationRemoveRequest, HandleEventNotificationRemoveRequest); - AddLocalPacketHandler(PacketType.RetrieveInstantMessages, HandleRetrieveInstantMessages); - AddLocalPacketHandler(PacketType.PickDelete, HandlePickDelete); - AddLocalPacketHandler(PacketType.PickGodDelete, HandlePickGodDelete); - AddLocalPacketHandler(PacketType.PickInfoUpdate, HandlePickInfoUpdate); - AddLocalPacketHandler(PacketType.AvatarNotesUpdate, HandleAvatarNotesUpdate); - AddLocalPacketHandler(PacketType.AvatarInterestsUpdate, HandleAvatarInterestsUpdate); - AddLocalPacketHandler(PacketType.GrantUserRights, HandleGrantUserRights); - AddLocalPacketHandler(PacketType.PlacesQuery, HandlePlacesQuery); - AddLocalPacketHandler(PacketType.UpdateMuteListEntry, HandleUpdateMuteListEntry); - AddLocalPacketHandler(PacketType.RemoveMuteListEntry, HandleRemoveMuteListEntry); - AddLocalPacketHandler(PacketType.UserReport, HandleUserReport); - AddLocalPacketHandler(PacketType.FindAgent, HandleFindAgent); - AddLocalPacketHandler(PacketType.TrackAgent, HandleTrackAgent); - AddLocalPacketHandler(PacketType.GodUpdateRegionInfo, HandleGodUpdateRegionInfoUpdate); - AddLocalPacketHandler(PacketType.GodlikeMessage, HandleGodlikeMessage); - AddLocalPacketHandler(PacketType.StateSave, HandleSaveStatePacket); - AddLocalPacketHandler(PacketType.GroupAccountDetailsRequest, HandleGroupAccountDetailsRequest); - AddLocalPacketHandler(PacketType.GroupAccountSummaryRequest, HandleGroupAccountSummaryRequest); - AddLocalPacketHandler(PacketType.GroupAccountTransactionsRequest, HandleGroupTransactionsDetailsRequest); - AddLocalPacketHandler(PacketType.FreezeUser, HandleFreezeUser); - AddLocalPacketHandler(PacketType.EjectUser, HandleEjectUser); - AddLocalPacketHandler(PacketType.ParcelBuyPass, HandleParcelBuyPass); - AddLocalPacketHandler(PacketType.ParcelGodMarkAsContent, HandleParcelGodMarkAsContent); - AddLocalPacketHandler(PacketType.GroupActiveProposalsRequest, HandleGroupActiveProposalsRequest); - AddLocalPacketHandler(PacketType.GroupVoteHistoryRequest, HandleGroupVoteHistoryRequest); - AddLocalPacketHandler(PacketType.SimWideDeletes, HandleSimWideDeletes); - AddLocalPacketHandler(PacketType.SendPostcard, HandleSendPostcard); - AddLocalPacketHandler(PacketType.ChangeInventoryItemFlags, HandleChangeInventoryItemFlags); - AddLocalPacketHandler(PacketType.RevokePermissions, HandleRevokePermissions); AddGenericPacketHandler("autopilot", HandleAutopilot); } @@ -8482,23 +8533,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP ); } - private void HandleAgentUpdate(Packet packet) + private static void HandleAgentUpdate(LLClientView c, Packet packet) { - if(OnAgentUpdate is null) + if(c.OnAgentUpdate is null) return; AgentUpdatePacket agentUpdate = (AgentUpdatePacket)packet; AgentUpdatePacket.AgentDataBlock x = agentUpdate.AgentData; - if (x.AgentID.NotEqual(m_agentId) || x.SessionID.NotEqual(m_sessionId)) + if (x.AgentID.NotEqual(c.m_agentId) || x.SessionID.NotEqual(c.m_sessionId)) return; uint seq = packet.Header.Sequence; - TotalAgentUpdates++; + c.TotalAgentUpdates++; // dont let ignored updates pollute this throttles - if(SceneAgent is null || SceneAgent.IsChildAgent || - SceneAgent.IsInTransit || seq <= m_thisAgentUpdateArgs.lastpacketSequence ) + if(c.SceneAgent is null || c.SceneAgent.IsChildAgent || + c.SceneAgent.IsInTransit || seq <= c.m_thisAgentUpdateArgs.lastpacketSequence ) { // throttle reset is done at MoveAgentIntoRegion() // called by scenepresence on completemovement @@ -8506,137 +8557,138 @@ namespace OpenSim.Region.ClientStack.LindenUDP return; } - m_thisAgentUpdateArgs.lastpacketSequence = seq; + c.m_thisAgentUpdateArgs.lastpacketSequence = seq; - OnPreAgentUpdate?.Invoke(this, m_thisAgentUpdateArgs); + c.OnPreAgentUpdate?.Invoke(c, c.m_thisAgentUpdateArgs); bool movement; bool camera; double now = Util.GetTimeStampMS(); - if(now - m_thisAgentUpdateArgs.lastUpdateTS > 500.0) // at least 2 per sec + if(now - c.m_thisAgentUpdateArgs.lastUpdateTS > 500.0) // at least 2 per sec { movement = true; camera = true; } else { - movement = CheckAgentMovementUpdateSignificance(x); - camera = CheckAgentCameraUpdateSignificance(x); + movement = c.CheckAgentMovementUpdateSignificance(x); + camera = c.CheckAgentCameraUpdateSignificance(x); } // Was there a significant movement/state change? if (movement) { - m_thisAgentUpdateArgs.BodyRotation = x.BodyRotation; - m_thisAgentUpdateArgs.ControlFlags = x.ControlFlags; - m_thisAgentUpdateArgs.Far = x.Far; - m_thisAgentUpdateArgs.Flags = x.Flags; - m_thisAgentUpdateArgs.HeadRotation = x.HeadRotation; - m_thisAgentUpdateArgs.State = x.State; + c.m_thisAgentUpdateArgs.BodyRotation = x.BodyRotation; + c.m_thisAgentUpdateArgs.ControlFlags = x.ControlFlags; + c.m_thisAgentUpdateArgs.Far = x.Far; + c.m_thisAgentUpdateArgs.Flags = x.Flags; + c.m_thisAgentUpdateArgs.HeadRotation = x.HeadRotation; + c.m_thisAgentUpdateArgs.State = x.State; - m_thisAgentUpdateArgs.NeedsCameraCollision = !camera; + c.m_thisAgentUpdateArgs.NeedsCameraCollision = !camera; - OnAgentUpdate?.Invoke(this, m_thisAgentUpdateArgs); + c.OnAgentUpdate?.Invoke(c, c.m_thisAgentUpdateArgs); } // Was there a significant camera(s) change? if (camera) { - m_thisAgentUpdateArgs.CameraAtAxis = x.CameraAtAxis; - m_thisAgentUpdateArgs.CameraCenter = x.CameraCenter; - m_thisAgentUpdateArgs.CameraLeftAxis = x.CameraLeftAxis; - m_thisAgentUpdateArgs.CameraUpAxis = x.CameraUpAxis; + c.m_thisAgentUpdateArgs.CameraAtAxis = x.CameraAtAxis; + c.m_thisAgentUpdateArgs.CameraCenter = x.CameraCenter; + c.m_thisAgentUpdateArgs.CameraLeftAxis = x.CameraLeftAxis; + c.m_thisAgentUpdateArgs.CameraUpAxis = x.CameraUpAxis; - m_thisAgentUpdateArgs.NeedsCameraCollision = true; + c.m_thisAgentUpdateArgs.NeedsCameraCollision = true; - OnAgentCameraUpdate?.Invoke(this, m_thisAgentUpdateArgs); + c.OnAgentCameraUpdate?.Invoke(c, c.m_thisAgentUpdateArgs); } if(movement && camera) - m_thisAgentUpdateArgs.lastUpdateTS = now; + c.m_thisAgentUpdateArgs.lastUpdateTS = now; } - private void HandleMoneyTransferRequest(Packet Pack) + + private static void HandleMoneyTransferRequest(LLClientView c, Packet Pack) { - if(OnMoneyTransferRequest is null) + if(c.OnMoneyTransferRequest is null) return; MoneyTransferRequestPacket money = (MoneyTransferRequestPacket)Pack; // validate the agent owns the agentID and sessionID - if (money.MoneyData.SourceID.Equals(m_agentId) && money.AgentData.AgentID.Equals(m_agentId) && - money.AgentData.SessionID.Equals(m_sessionId)) + if (money.MoneyData.SourceID.Equals(c.m_agentId) && money.AgentData.AgentID.Equals(c.m_agentId) && + money.AgentData.SessionID.Equals(c.m_sessionId)) { - OnMoneyTransferRequest?.Invoke(money.MoneyData.SourceID, money.MoneyData.DestID, + c.OnMoneyTransferRequest?.Invoke(money.MoneyData.SourceID, money.MoneyData.DestID, money.MoneyData.Amount, money.MoneyData.TransactionType, Util.FieldToString(money.MoneyData.Description)); } } - private void HandleParcelGodMarkAsContent(Packet packet) + private static void HandleParcelGodMarkAsContent(LLClientView c, Packet packet) { - if(OnParcelGodMark is null) + if(c.OnParcelGodMark is null) return; ParcelGodMarkAsContentPacket ParcelGodMarkAsContent = (ParcelGodMarkAsContentPacket)packet; - if(m_sessionId != ParcelGodMarkAsContent.AgentData.SessionID || m_agentId != ParcelGodMarkAsContent.AgentData.AgentID) + if(c.m_sessionId.NotEqual(ParcelGodMarkAsContent.AgentData.SessionID) || c.m_agentId.NotEqual(ParcelGodMarkAsContent.AgentData.AgentID)) return; - OnParcelGodMark?.Invoke(this, - m_agentId, + c.OnParcelGodMark?.Invoke(c, + c.m_agentId, ParcelGodMarkAsContent.ParcelData.LocalID); } - private void HandleFreezeUser(Packet packet) + private static void HandleFreezeUser(LLClientView c, Packet packet) { - if(OnParcelFreezeUser is null) + if(c.OnParcelFreezeUser is null) return; FreezeUserPacket FreezeUser = (FreezeUserPacket)packet; - if(m_sessionId != FreezeUser.AgentData.SessionID || m_agentId != FreezeUser.AgentData.AgentID) + if(c.m_sessionId.NotEqual(FreezeUser.AgentData.SessionID) || c.m_agentId.NotEqual(FreezeUser.AgentData.AgentID)) return; - OnParcelFreezeUser?.Invoke(this, - m_agentId, + c.OnParcelFreezeUser?.Invoke(c, + c.m_agentId, FreezeUser.Data.Flags, FreezeUser.Data.TargetID); } - private void HandleEjectUser(Packet packet) + private static void HandleEjectUser(LLClientView c, Packet packet) { - if(OnParcelEjectUser is null) + if(c.OnParcelEjectUser is null) return; EjectUserPacket EjectUser = (EjectUserPacket)packet; - if(m_sessionId != EjectUser.AgentData.SessionID || m_agentId != EjectUser.AgentData.AgentID) + if(c.m_sessionId.NotEqual(EjectUser.AgentData.SessionID) || c.m_agentId.NotEqual(EjectUser.AgentData.AgentID)) return; - OnParcelEjectUser?.Invoke(this, - m_agentId, + c.OnParcelEjectUser?.Invoke(c, + c.m_agentId, EjectUser.Data.Flags, EjectUser.Data.TargetID); } - private void HandleParcelBuyPass(Packet packet) + private static void HandleParcelBuyPass(LLClientView c, Packet packet) { - if(OnParcelBuyPass is null) + if(c.OnParcelBuyPass is null) return; ParcelBuyPassPacket ParcelBuyPass = (ParcelBuyPassPacket)packet; - if(m_sessionId != ParcelBuyPass.AgentData.SessionID || m_agentId != ParcelBuyPass.AgentData.AgentID) + if(c.m_sessionId.NotEqual(ParcelBuyPass.AgentData.SessionID) || c.m_agentId.NotEqual(ParcelBuyPass.AgentData.AgentID)) return; - OnParcelBuyPass?.Invoke(this, - m_agentId, + c.OnParcelBuyPass?.Invoke(c, + c.m_agentId, ParcelBuyPass.ParcelData.LocalID); } - private void HandleParcelBuyRequest(Packet Pack) + private static void HandleParcelBuyRequest(LLClientView c, Packet Pack) { ParcelBuyPacket parcel = (ParcelBuyPacket)Pack; - if (parcel.AgentData.AgentID.Equals(m_agentId) && parcel.AgentData.SessionID.Equals(m_sessionId)) + if (parcel.AgentData.AgentID.Equals(c.m_agentId) && parcel.AgentData.SessionID.Equals(c.m_sessionId)) { - OnParcelBuy?.Invoke(m_agentId, parcel.Data.GroupID, parcel.Data.Final, + c.OnParcelBuy?.Invoke(c.m_agentId, parcel.Data.GroupID, parcel.Data.Final, parcel.Data.IsGroupOwned, parcel.Data.RemoveContribution, parcel.Data.LocalID, parcel.ParcelData.Area, parcel.ParcelData.Price, @@ -8644,34 +8696,34 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - private void HandleUUIDGroupNameRequest(Packet Pack) + private static void HandleUUIDGroupNameRequest(LLClientView c, Packet Pack) { - if(OnUUIDGroupNameRequest is null) + if(c.OnUUIDGroupNameRequest is null) return; - ScenePresence sp = (ScenePresence)SceneAgent; + ScenePresence sp = (ScenePresence)c.SceneAgent; if(sp is null || sp.IsDeleted || (sp.IsInTransit && !sp.IsInLocalTransit)) return; UUIDGroupNameRequestPacket upack = (UUIDGroupNameRequestPacket)Pack; for (int i = 0; i < upack.UUIDNameBlock.Length; i++) { - OnUUIDGroupNameRequest?.Invoke(upack.UUIDNameBlock[i].ID, this); + c.OnUUIDGroupNameRequest?.Invoke(upack.UUIDNameBlock[i].ID, c); } } - public void HandleGenericMessage(Packet pack) + public static void HandleGenericMessage(LLClientView c, Packet pack) { - if (m_genericPacketHandlers.Count == 0) + if (c.m_genericPacketHandlers.Count == 0) return; GenericMessagePacket gmpack = (GenericMessagePacket)pack; - if (gmpack.AgentData.SessionID.NotEqual(m_sessionId) || gmpack.AgentData.AgentID.NotEqual(m_agentId)) + if (gmpack.AgentData.SessionID.NotEqual(c.m_sessionId) || gmpack.AgentData.AgentID.NotEqual(c.m_agentId)) return; string method = Util.FieldToString(gmpack.MethodData.Method).ToLower().Trim(); - if (m_genericPacketHandlers.TryGetValue(method, out GenericMessage handlerGenericMessage)) + if (c.m_genericPacketHandlers.TryGetValue(method, out GenericMessage handlerGenericMessage)) { List<string> msg = new(); List<byte[]> msgBytes = new(); @@ -8684,8 +8736,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP try { - OnBinaryGenericMessage?.Invoke(this, method, msgBytes.ToArray()); - handlerGenericMessage?.Invoke(this, method, msg); + c.OnBinaryGenericMessage?.Invoke(c, method, msgBytes.ToArray()); + handlerGenericMessage?.Invoke(c, method, msg); } catch (Exception e) { @@ -8695,33 +8747,32 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - public void HandleObjectGroupRequest(Packet Pack) + public static void HandleObjectGroupRequest(LLClientView c, Packet Pack) { - if(OnObjectGroupRequest is null) + if(c.OnObjectGroupRequest is null) return; ObjectGroupPacket ogpack = (ObjectGroupPacket)Pack; - if (ogpack.AgentData.SessionID.NotEqual(m_sessionId)) + if (ogpack.AgentData.SessionID.NotEqual(c.m_sessionId)) return; for (int i = 0; i < ogpack.ObjectData.Length; i++) { - OnObjectGroupRequest?.Invoke(this, ogpack.AgentData.GroupID, ogpack.ObjectData[i].ObjectLocalID, UUID.Zero); + c.OnObjectGroupRequest?.Invoke(c, ogpack.AgentData.GroupID, ogpack.ObjectData[i].ObjectLocalID, UUID.Zero); } } - private void HandleViewerEffect(Packet Pack) + private static void HandleViewerEffect(LLClientView c, Packet Pack) { - if(OnViewerEffect is null) + if(c.OnViewerEffect is null) return; ViewerEffectPacket viewer = (ViewerEffectPacket)Pack; - if (viewer.AgentData.SessionID.NotEqual(m_sessionId) || m_agentId != viewer.AgentData.AgentID) + if (viewer.AgentData.SessionID.NotEqual(c.m_sessionId) || c.m_agentId != viewer.AgentData.AgentID) return; - int length = viewer.Effect.Length; - List<ViewerEffectEventHandlerArg> args = new(length); - for (int i = 0; i < length; i++) + List<ViewerEffectEventHandlerArg> args = new(viewer.Effect.Length); + for (int i = 0; i < viewer.Effect.Length; i++) { //copy the effects block arguments into the event handler arg. ViewerEffectEventHandlerArg argument = new() @@ -8735,45 +8786,41 @@ namespace OpenSim.Region.ClientStack.LindenUDP }; args.Add(argument); } - OnViewerEffect?.Invoke(this, args); + c.OnViewerEffect?.Invoke(c, args); } - private void HandleVelocityInterpolateOff(Packet Pack) + private static void HandleVelocityInterpolateOff(LLClientView c, Packet Pack) { VelocityInterpolateOffPacket p = (VelocityInterpolateOffPacket)Pack; - if (p.AgentData.SessionID.NotEqual(m_sessionId) || p.AgentData.AgentID.NotEqual(m_agentId)) - return ; - - m_VelocityInterpolate = false; + if (p.AgentData.SessionID.Equals(c.m_sessionId) && p.AgentData.AgentID.Equals(c.m_agentId)) + c.m_VelocityInterpolate = false; } - private void HandleVelocityInterpolateOn(Packet Pack) + private static void HandleVelocityInterpolateOn(LLClientView c, Packet Pack) { - VelocityInterpolateOnPacket p = (VelocityInterpolateOnPacket)Pack; - if (p.AgentData.SessionID.NotEqual(m_sessionId) || p.AgentData.AgentID.NotEqual(m_agentId)) - return; - - m_VelocityInterpolate = true; + VelocityInterpolateOffPacket p = (VelocityInterpolateOffPacket)Pack; + if (p.AgentData.SessionID.Equals(c.m_sessionId) && p.AgentData.AgentID.Equals(c.m_agentId)) + c.m_VelocityInterpolate = true; } - private void HandleAvatarPropertiesRequest(Packet Pack) + private static void HandleAvatarPropertiesRequest(LLClientView c, Packet Pack) { AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack; - if (avatarProperties.AgentData.SessionID.NotEqual(m_sessionId) || avatarProperties.AgentData.AgentID.NotEqual(m_agentId)) + if (avatarProperties.AgentData.SessionID.NotEqual(c.m_sessionId) || avatarProperties.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnRequestAvatarProperties?.Invoke(this, avatarProperties.AgentData.AvatarID); + c.OnRequestAvatarProperties?.Invoke(c, avatarProperties.AgentData.AvatarID); } - private void HandleChatFromViewer(Packet Pack) + private static void HandleChatFromViewer(LLClientView c, Packet Pack) { - if (OnChatFromClient is null) + if (c.OnChatFromClient is null) return; ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack; - if (inchatpack.AgentData.SessionID.NotEqual(m_sessionId) || inchatpack.AgentData.AgentID.NotEqual(m_agentId)) + if (inchatpack.AgentData.SessionID.NotEqual(c.m_sessionId) || inchatpack.AgentData.AgentID.NotEqual(c.m_agentId)) return; ChatFromViewerPacket.ChatDataBlock packdata = inchatpack.ChatData; @@ -8782,28 +8829,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP Channel = packdata.Channel, Message = Utils.BytesToString(packdata.Message), Type = (ChatTypeEnum)packdata.Type, - Position = SceneAgent.AbsolutePosition, + Position = c.SceneAgent.AbsolutePosition, - Scene = Scene, - Sender = this + Scene = c.Scene, + Sender = c }; - OnChatFromClient?.Invoke(this, args); + c.OnChatFromClient?.Invoke(c, args); } - private void HandlerAvatarPropertiesUpdate(Packet Pack) + private static void HandlerAvatarPropertiesUpdate(LLClientView c, Packet Pack) { - if (OnUpdateAvatarProperties is null) + if (c.OnUpdateAvatarProperties is null) return; AvatarPropertiesUpdatePacket avatarProps = (AvatarPropertiesUpdatePacket)Pack; - if (avatarProps.AgentData.SessionID.NotEqual(m_sessionId) || avatarProps.AgentData.AgentID.NotEqual(m_agentId)) + if (avatarProps.AgentData.SessionID.NotEqual(c.m_sessionId) || avatarProps.AgentData.AgentID.NotEqual(c.m_agentId)) return; AvatarPropertiesUpdatePacket.PropertiesDataBlock Properties = avatarProps.PropertiesData; UserProfileProperties UserProfile = new() { - UserId = AgentId, + UserId = c.AgentId, WebUrl = Utils.BytesToString(Properties.ProfileURL), ImageId = Properties.ImageID, FirstLifeImageId = Properties.FLImageID, @@ -8812,17 +8859,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP PublishProfile = Properties.AllowPublish, PublishMature = Properties.MaturePublish }; - OnUpdateAvatarProperties?.Invoke(this, UserProfile); + c.OnUpdateAvatarProperties?.Invoke(c, UserProfile); } - private void HandlerScriptDialogReply(Packet Pack) + private static void HandlerScriptDialogReply(LLClientView c, Packet Pack) { - if (OnChatFromClient is null) + if (c.OnChatFromClient is null) return; ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack; //m_log.DebugFormat("[CLIENT]: Received ScriptDialogReply from {0}", rdialog.Data.ObjectID); - if (rdialog.AgentData.SessionID.NotEqual(m_sessionId) || rdialog.AgentData.AgentID.NotEqual(m_agentId)) + if (rdialog.AgentData.SessionID.NotEqual(c.m_sessionId) || rdialog.AgentData.AgentID.NotEqual(c.m_agentId)) return; ScriptDialogReplyPacket.DataBlock rdialogData = rdialog.Data; @@ -8831,25 +8878,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP Channel = rdialogData.ChatChannel, Message = Utils.BytesToString(rdialogData.ButtonLabel), Type = ChatTypeEnum.Region, //Behaviour in SL is that the response can be heard from any distance - Scene = Scene, - Sender = this + Scene = c.Scene, + Sender = c }; - OnChatFromClient?.Invoke(this, args); + c.OnChatFromClient?.Invoke(c, args); } - private void HandlerImprovedInstantMessage(Packet Pack) + private static void HandlerImprovedInstantMessage(LLClientView c, Packet Pack) { - if(OnInstantMessage is null) + if(c.OnInstantMessage is null) return; ImprovedInstantMessagePacket msgpack = (ImprovedInstantMessagePacket)Pack; - if (msgpack.AgentData.SessionID.NotEqual(m_sessionId) || msgpack.AgentData.AgentID.NotEqual(m_agentId)) + if (msgpack.AgentData.SessionID.NotEqual(c.m_sessionId) || msgpack.AgentData.AgentID.NotEqual(c.m_agentId)) return; string IMfromName = Util.FieldToString(msgpack.MessageBlock.FromAgentName); string IMmessage = Utils.BytesToString(msgpack.MessageBlock.Message); - GridInstantMessage im = new(Scene, + GridInstantMessage im = new(c.Scene, msgpack.AgentData.AgentID, IMfromName, msgpack.MessageBlock.ToAgentID, @@ -8862,16 +8909,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP msgpack.MessageBlock.BinaryBucket, true); - OnInstantMessage?.Invoke(this, im); + c.OnInstantMessage?.Invoke(c, im); } - private void HandlerAcceptFriendship(Packet Pack) + private static void HandlerAcceptFriendship(LLClientView c, Packet Pack) { - if(OnApproveFriendRequest is null) + if(c.OnApproveFriendRequest is null) return; AcceptFriendshipPacket afriendpack = (AcceptFriendshipPacket)Pack; - if (afriendpack.AgentData.SessionID.NotEqual(m_sessionId) || afriendpack.AgentData.AgentID.NotEqual(m_agentId)) + if (afriendpack.AgentData.SessionID.NotEqual(c.m_sessionId) || afriendpack.AgentData.AgentID.NotEqual(c.m_agentId)) return; // My guess is this is the folder to stick the calling card into @@ -8883,62 +8930,60 @@ namespace OpenSim.Region.ClientStack.LindenUDP callingCardFolders.Add(afriendpack.FolderData[fi].FolderID); } - OnApproveFriendRequest?.Invoke(this, transactionID, callingCardFolders); + c.OnApproveFriendRequest?.Invoke(c, transactionID, callingCardFolders); } - private void HandlerDeclineFriendship(Packet Pack) + private static void HandlerDeclineFriendship(LLClientView c, Packet Pack) { DeclineFriendshipPacket dfriendpack = (DeclineFriendshipPacket)Pack; - if (dfriendpack.AgentData.SessionID.NotEqual(m_sessionId) || dfriendpack.AgentData.AgentID.NotEqual(m_agentId)) + if (dfriendpack.AgentData.SessionID.NotEqual(c.m_sessionId) || dfriendpack.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnDenyFriendRequest?.Invoke(this, - dfriendpack.TransactionBlock.TransactionID, - null); + c.OnDenyFriendRequest?.Invoke(c, dfriendpack.TransactionBlock.TransactionID, null); } - private void HandlerTerminateFriendship(Packet Pack) + private static void HandlerTerminateFriendship(LLClientView c, Packet Pack) { TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack; - if (tfriendpack.AgentData.SessionID.NotEqual(m_sessionId) || tfriendpack.AgentData.AgentID.NotEqual(m_agentId)) + if (tfriendpack.AgentData.SessionID.NotEqual(c.m_sessionId) || tfriendpack.AgentData.AgentID.NotEqual(c.m_agentId)) return; UUID exFriendID = tfriendpack.ExBlock.OtherID; - FriendshipTermination TerminateFriendshipHandler = OnTerminateFriendship; - TerminateFriendshipHandler?.Invoke(this, exFriendID); + FriendshipTermination TerminateFriendshipHandler = c.OnTerminateFriendship; + TerminateFriendshipHandler?.Invoke(c, exFriendID); } - private void HandleFindAgent(Packet packet) + private static void HandleFindAgent(LLClientView c, Packet packet) { FindAgentPacket FindAgent = (FindAgentPacket)packet; - OnFindAgent?.Invoke(this,FindAgent.AgentBlock.Hunter,FindAgent.AgentBlock.Prey); + c.OnFindAgent?.Invoke(c, FindAgent.AgentBlock.Hunter,FindAgent.AgentBlock.Prey); } - private void HandleTrackAgent(Packet packet) + private static void HandleTrackAgent(LLClientView c, Packet packet) { TrackAgentPacket TrackAgent = (TrackAgentPacket)packet; - if(TrackAgent.AgentData.AgentID.NotEqual(m_agentId) || TrackAgent.AgentData.SessionID.NotEqual(m_sessionId)) + if(TrackAgent.AgentData.AgentID.NotEqual(c.m_agentId) || TrackAgent.AgentData.SessionID.NotEqual(c.m_sessionId)) return; - OnTrackAgent?.Invoke(this, + c.OnTrackAgent?.Invoke(c, TrackAgent.AgentData.AgentID, TrackAgent.TargetData.PreyID); } - private void HandlerRezObject(Packet Pack) + private static void HandlerRezObject(LLClientView c, Packet Pack) { RezObjectPacket rezPacket = (RezObjectPacket)Pack; - if (rezPacket.AgentData.SessionID.NotEqual(m_sessionId) || rezPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (rezPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || rezPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; UUID rezGroupID = rezPacket.AgentData.GroupID; - if(!IsGroupMember(rezGroupID)) + if(!c.IsGroupMember(rezGroupID)) rezGroupID = UUID.Zero; - OnRezObject?.Invoke(this, rezPacket.InventoryData.ItemID, rezGroupID, rezPacket.RezData.RayEnd, + c.OnRezObject?.Invoke(c, rezPacket.InventoryData.ItemID, rezGroupID, rezPacket.RezData.RayEnd, rezPacket.RezData.RayStart, rezPacket.RezData.RayTargetID, rezPacket.RezData.BypassRaycast, rezPacket.RezData.RayEndIsIntersection, rezPacket.RezData.RezSelected, rezPacket.RezData.RemoveItem, @@ -8952,14 +8997,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP } private Dictionary<UUID, DeRezObjectInfo> m_DeRezObjectDelayed; - private void HandlerDeRezObject(Packet Pack) + private static void HandlerDeRezObject(LLClientView c, Packet Pack) { - if (OnDeRezObject is null) + if (c.OnDeRezObject is null) return; DeRezObjectPacket DeRezPacket = (DeRezObjectPacket)Pack; DeRezObjectPacket.AgentDataBlock DeRezPacketAgentData = DeRezPacket.AgentData; - if (DeRezPacketAgentData.AgentID.NotEqual(m_agentId) || DeRezPacketAgentData.SessionID.NotEqual(m_sessionId)) + if (DeRezPacketAgentData.AgentID.NotEqual(c.m_agentId) || DeRezPacketAgentData.SessionID.NotEqual(c.m_sessionId)) return; List<uint> deRezIDs; @@ -8971,9 +9016,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (numberPackets > 1) { - m_DeRezObjectDelayed ??= new Dictionary<UUID, DeRezObjectInfo>(); + c.m_DeRezObjectDelayed ??= new Dictionary<UUID, DeRezObjectInfo>(); - if (!m_DeRezObjectDelayed.TryGetValue(id, out DeRezObjectInfo info)) + if (!c.m_DeRezObjectDelayed.TryGetValue(id, out DeRezObjectInfo info)) { deRezIDs = new List<uint>(DeRezPacket.ObjectData.Length); info = new DeRezObjectInfo @@ -8981,7 +9026,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP rcvedpackets = new HashSet<int>() { curPacket }, objectids = deRezIDs }; - m_DeRezObjectDelayed[id] = info; + c.m_DeRezObjectDelayed[id] = info; } else { @@ -8999,7 +9044,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (info.rcvedpackets.Count < numberPackets) return; - m_DeRezObjectDelayed.Remove(id); + c.m_DeRezObjectDelayed.Remove(id); info.objectids = null; info.rcvedpackets = null; } @@ -9012,23 +9057,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - OnDeRezObject?.Invoke(this, deRezIDs, DeRezPacketAgentBlock.GroupID, + c.OnDeRezObject?.Invoke(c, deRezIDs, DeRezPacketAgentBlock.GroupID, action, DeRezPacketAgentBlock.DestinationID); } - private void HandlerRezRestoreToWorld(Packet Pack) + private static void HandlerRezRestoreToWorld(LLClientView c, Packet Pack) { RezRestoreToWorldPacket restore = (RezRestoreToWorldPacket)Pack; - if (restore.AgentData.SessionID.NotEqual(m_sessionId) || restore.AgentData.AgentID.NotEqual(m_agentId)) + if (restore.AgentData.SessionID.NotEqual(c.m_sessionId) || restore.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnRezRestoreToWorld?.Invoke(this, restore.InventoryData.ItemID); + c.OnRezRestoreToWorld?.Invoke(c, restore.InventoryData.ItemID); } - private void HandlerModifyLand(Packet Pack) + private static void HandlerModifyLand(LLClientView c, Packet Pack) { - if (OnModifyTerrain is null) + if (c.OnModifyTerrain is null) return; ModifyLandPacket modify = (ModifyLandPacket)Pack; @@ -9036,13 +9081,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (modify.ParcelData.Length == 0) return; - if (modify.AgentData.SessionID.NotEqual(m_sessionId) || modify.AgentData.AgentID.NotEqual(m_agentId)) + if (modify.AgentData.SessionID.NotEqual(c.m_sessionId) || modify.AgentData.AgentID.NotEqual(c.m_agentId)) return; //m_log.Info("[LAND]: LAND:" + modify.ToString()); for (int i = 0; i < modify.ParcelData.Length; i++) { - OnModifyTerrain?.Invoke(m_agentId, modify.ModifyBlock.Height, modify.ModifyBlock.Seconds, + c.OnModifyTerrain?.Invoke(c.m_agentId, modify.ModifyBlock.Height, modify.ModifyBlock.Seconds, modify.ModifyBlockExtended[i].BrushSize, modify.ModifyBlock.Action, modify.ParcelData[i].North, modify.ParcelData[i].West, modify.ParcelData[i].South, modify.ParcelData[i].East, @@ -9052,36 +9097,36 @@ namespace OpenSim.Region.ClientStack.LindenUDP public uint m_viewerHandShakeFlags = 0; - private void HandlerRegionHandshakeReply(Packet Pack) + private static void HandlerRegionHandshakeReply(LLClientView c, Packet Pack) { - if (OnRegionHandShakeReply is null) + if (c.OnRegionHandShakeReply is null) return; // silence the warning RegionHandshakeReplyPacket rsrpkt = (RegionHandshakeReplyPacket)Pack; - if(rsrpkt.AgentData.AgentID.NotEqual(m_agentId) || rsrpkt.AgentData.SessionID.NotEqual(m_sessionId)) + if(rsrpkt.AgentData.AgentID.NotEqual(c.m_agentId) || rsrpkt.AgentData.SessionID.NotEqual(c.m_sessionId)) return; - if(m_supportViewerCache) - m_viewerHandShakeFlags = rsrpkt.RegionInfo.Flags; + if(c.m_supportViewerCache) + c.m_viewerHandShakeFlags = rsrpkt.RegionInfo.Flags; else - m_viewerHandShakeFlags = 0; + c.m_viewerHandShakeFlags = 0; - OnRegionHandShakeReply?.Invoke(this); + c.OnRegionHandShakeReply?.Invoke(c); } - private void HandlerAgentWearablesRequest(Packet Pack) + private static void HandlerAgentWearablesRequest(LLClientView c, Packet Pack) { - OnRequestWearables?.Invoke(this); - OnRequestAvatarsData?.Invoke(this); + c.OnRequestWearables?.Invoke(c); + c.OnRequestAvatarsData?.Invoke(c); } - private void HandlerAgentSetAppearance(Packet Pack) + private static void HandlerAgentSetAppearance(LLClientView c, Packet Pack) { - if(OnSetAppearance is null) + if(c.OnSetAppearance is null) return; AgentSetAppearancePacket appear = (AgentSetAppearancePacket)Pack; - if (appear.AgentData.SessionID.NotEqual(m_sessionId) || appear.AgentData.AgentID.NotEqual(m_agentId)) + if (appear.AgentData.SessionID.NotEqual(c.m_sessionId) || appear.AgentData.AgentID.NotEqual(c.m_agentId)) return; try @@ -9103,24 +9148,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP TextureIndex=Convert.ToUInt32(appear.WearableData[i].TextureIndex) }; - OnSetAppearance?.Invoke(this, te, visualparams,avSize, cacheitems); + c.OnSetAppearance?.Invoke(c, te, visualparams,avSize, cacheitems); } catch (Exception e) { - m_log.ErrorFormat( - "[CLIENT VIEW]: AgentSetApperance packet handler threw an exception, {0}", - e); + m_log.Error($"[CLIENT VIEW]: AgentSetApperance packet handler threw an exception, {e.Message}"); } } - private void HandlerAgentIsNowWearing(Packet Pack) + private static void HandlerAgentIsNowWearing(LLClientView c, Packet Pack) { - if (OnAvatarNowWearing is null) + if (c.OnAvatarNowWearing is null) return; AgentIsNowWearingPacket nowWearing = (AgentIsNowWearingPacket)Pack; - if (nowWearing.AgentData.SessionID.NotEqual(m_sessionId) || nowWearing.AgentData.AgentID.NotEqual(m_agentId)) + if (nowWearing.AgentData.SessionID.NotEqual(c.m_sessionId) || nowWearing.AgentData.AgentID.NotEqual(c.m_agentId)) return; AvatarWearingArgs wearingArgs = new(); @@ -9132,166 +9175,164 @@ namespace OpenSim.Region.ClientStack.LindenUDP wearingArgs.NowWearing.Add(wearable); } - OnAvatarNowWearing?.Invoke(this, wearingArgs); + c.OnAvatarNowWearing?.Invoke(c, wearingArgs); } - private void HandlerRezSingleAttachmentFromInv(Packet Pack) + private static void HandlerRezSingleAttachmentFromInv(LLClientView c, Packet Pack) { RezSingleAttachmentFromInvPacket rez = (RezSingleAttachmentFromInvPacket)Pack; - if (rez.AgentData.SessionID.NotEqual(m_sessionId) || rez.AgentData.AgentID.NotEqual(m_agentId)) + if (rez.AgentData.SessionID.NotEqual(c.m_sessionId) || rez.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnRezSingleAttachmentFromInv?.Invoke(this, rez.ObjectData.ItemID, + c.OnRezSingleAttachmentFromInv?.Invoke(c, rez.ObjectData.ItemID, rez.ObjectData.AttachmentPt); } - private void HandleRezMultipleAttachmentsFromInv(Packet Pack) + private static void HandleRezMultipleAttachmentsFromInv(LLClientView c, Packet Pack) { - if(OnRezMultipleAttachmentsFromInv is null) + if(c.OnRezMultipleAttachmentsFromInv is null) return; RezMultipleAttachmentsFromInvPacket rez = (RezMultipleAttachmentsFromInvPacket)Pack; RezMultipleAttachmentsFromInvPacket.AgentDataBlock rezAgentData = rez.AgentData; - if (rezAgentData.SessionID.NotEqual(m_sessionId) || rezAgentData.AgentID.NotEqual(m_agentId)) + if (rezAgentData.SessionID.NotEqual(c.m_sessionId) || rezAgentData.AgentID.NotEqual(c.m_agentId)) return; List<KeyValuePair<UUID, uint>> rezlist = new(); foreach (RezMultipleAttachmentsFromInvPacket.ObjectDataBlock obj in rez.ObjectData) rezlist.Add(new KeyValuePair<UUID, uint>(obj.ItemID, obj.AttachmentPt)); - OnRezMultipleAttachmentsFromInv?.Invoke(this, rezlist); + c.OnRezMultipleAttachmentsFromInv?.Invoke(c, rezlist); } - private void HandleDetachAttachmentIntoInv(Packet Pack) + private static void HandleDetachAttachmentIntoInv(LLClientView c, Packet Pack) { - if (OnDetachAttachmentIntoInv is null) + if (c.OnDetachAttachmentIntoInv is null) return; - DetachAttachmentIntoInvPacket detachtoInv = (DetachAttachmentIntoInvPacket)Pack; - if(detachtoInv.ObjectData.AgentID.NotEqual(m_agentId)) - return; + DetachAttachmentIntoInvPacket detachtoInv = (DetachAttachmentIntoInvPacket)Pack; + if(detachtoInv.ObjectData.AgentID.NotEqual(c.m_agentId)) + return; - OnDetachAttachmentIntoInv?.Invoke(detachtoInv.ObjectData.ItemID, this); + c.OnDetachAttachmentIntoInv?.Invoke(detachtoInv.ObjectData.ItemID, c); } - private void HandleObjectAttach(Packet Pack) + private static void HandleObjectAttach(LLClientView c, Packet Pack) { - if (OnObjectAttach is null) + if (c.OnObjectAttach is null) return; ObjectAttachPacket att = (ObjectAttachPacket)Pack; - if (att.AgentData.SessionID.NotEqual(m_sessionId) || att.AgentData.AgentID.NotEqual(m_agentId)) + if (att.AgentData.SessionID.NotEqual(c.m_sessionId) || att.AgentData.AgentID.NotEqual(c.m_agentId)) return; if (att.ObjectData.Length > 0) - OnObjectAttach?.Invoke(this, att.ObjectData[0].ObjectLocalID, att.AgentData.AttachmentPoint, false); + c.OnObjectAttach?.Invoke(c, att.ObjectData[0].ObjectLocalID, att.AgentData.AttachmentPoint, false); } - private void HandleObjectDetach(Packet Pack) + private static void HandleObjectDetach(LLClientView c, Packet Pack) { - if(OnObjectDetach is null) + if(c.OnObjectDetach is null) return; ObjectDetachPacket dett = (ObjectDetachPacket)Pack; - if (dett.AgentData.SessionID.NotEqual(m_sessionId) || dett.AgentData.AgentID.NotEqual(m_agentId)) + if (dett.AgentData.SessionID.NotEqual(c.m_sessionId) || dett.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int j = 0; j < dett.ObjectData.Length; j++) { uint obj = dett.ObjectData[j].ObjectLocalID; - OnObjectDetach?.Invoke(obj, this); + c.OnObjectDetach?.Invoke(obj, c); } } - private void HandleObjectDrop(Packet Pack) + private static void HandleObjectDrop(LLClientView c, Packet Pack) { - if(OnObjectDrop is null) + if(c.OnObjectDrop is null) return; ObjectDropPacket dropp = (ObjectDropPacket)Pack; - if (dropp.AgentData.SessionID.NotEqual(m_sessionId) || dropp.AgentData.AgentID.NotEqual(m_agentId)) + if (dropp.AgentData.SessionID.NotEqual(c.m_sessionId) || dropp.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int j = 0; j < dropp.ObjectData.Length; j++) { uint obj = dropp.ObjectData[j].ObjectLocalID; - OnObjectDrop?.Invoke(obj, this); + c.OnObjectDrop?.Invoke(obj, c); } } - private void HandleSetAlwaysRun(Packet Pack) + private static void HandleSetAlwaysRun(LLClientView c, Packet Pack) { SetAlwaysRunPacket run = (SetAlwaysRunPacket)Pack; - if (run.AgentData.SessionID.NotEqual(m_sessionId) || run.AgentData.AgentID.NotEqual(m_agentId)) - return; - - OnSetAlwaysRun?.Invoke(this, run.AgentData.AlwaysRun); + if (run.AgentData.SessionID.Equals(c.m_sessionId) && run.AgentData.AgentID.Equals(c.m_agentId)) + c.OnSetAlwaysRun?.Invoke(c, run.AgentData.AlwaysRun); } - private void HandleCompleteAgentMovement(Packet Pack) + private static void HandleCompleteAgentMovement(LLClientView c, Packet Pack) { //m_log.DebugFormat("[LLClientView] HandleCompleteAgentMovement"); CompleteAgentMovementPacket cmp = (CompleteAgentMovementPacket)Pack; - if(cmp.AgentData.AgentID.NotEqual(m_agentId) || cmp.AgentData.SessionID.NotEqual(m_sessionId) || cmp.AgentData.CircuitCode != m_circuitCode) - return; - - OnCompleteMovementToRegion?.Invoke(this, true); + if(cmp.AgentData.CircuitCode == c.m_circuitCode && + cmp.AgentData.AgentID.Equals(c.m_agentId) && + cmp.AgentData.SessionID.Equals(c.m_sessionId)) + c.OnCompleteMovementToRegion?.Invoke(c, true); } - private void HandleAgentAnimation(Packet Pack) + private static void HandleAgentAnimation(LLClientView c, Packet Pack) { - if(OnChangeAnim is null) + if(c.OnChangeAnim is null) return; AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack; - if (AgentAni.AgentData.SessionID.NotEqual(m_sessionId) || AgentAni.AgentData.AgentID.NotEqual(m_agentId)) + if (AgentAni.AgentData.SessionID.NotEqual(c.m_sessionId) || AgentAni.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < AgentAni.AnimationList.Length; i++) - OnChangeAnim?.Invoke(AgentAni.AnimationList[i].AnimID, AgentAni.AnimationList[i].StartAnim, false); + c.OnChangeAnim?.Invoke(AgentAni.AnimationList[i].AnimID, AgentAni.AnimationList[i].StartAnim, false); - OnChangeAnim?.Invoke(UUID.Zero, false, true); + c.OnChangeAnim?.Invoke(UUID.Zero, false, true); } - private void HandleAgentRequestSit(Packet Pack) + private static void HandleAgentRequestSit(LLClientView c, Packet Pack) { - if (OnAgentRequestSit is null) + if (c.OnAgentRequestSit is null) return; AgentRequestSitPacket agentRequestSit = (AgentRequestSitPacket)Pack; - if (agentRequestSit.AgentData.SessionID.NotEqual(m_sessionId) || agentRequestSit.AgentData.AgentID.NotEqual(m_agentId)) + if (agentRequestSit.AgentData.SessionID.NotEqual(c.m_sessionId) || agentRequestSit.AgentData.AgentID.NotEqual(c.m_agentId)) return; - if (SceneAgent.IsChildAgent) + if (c.SceneAgent.IsChildAgent) { - SendCantSitBecauseChildAgentResponse(); + c.SendCantSitBecauseChildAgentResponse(); return; } - OnAgentRequestSit?.Invoke(this, agentRequestSit.AgentData.AgentID, + c.OnAgentRequestSit?.Invoke(c, agentRequestSit.AgentData.AgentID, agentRequestSit.TargetObject.TargetID, agentRequestSit.TargetObject.Offset); } - private void HandleAgentSit(Packet Pack) + private static void HandleAgentSit(LLClientView c, Packet Pack) { - if (OnAgentSit is null) + if (c.OnAgentSit is null) return; AgentSitPacket agentSit = (AgentSitPacket)Pack; - if (agentSit.AgentData.SessionID.NotEqual(m_sessionId) || agentSit.AgentData.AgentID.NotEqual(m_agentId)) + if (agentSit.AgentData.SessionID.NotEqual(c.m_sessionId) || agentSit.AgentData.AgentID.NotEqual(c.m_agentId)) return; - if (SceneAgent.IsChildAgent) + if (c.SceneAgent.IsChildAgent) { - SendCantSitBecauseChildAgentResponse(); + c.SendCantSitBecauseChildAgentResponse(); return; } - OnAgentSit?.Invoke(this, agentSit.AgentData.AgentID); + c.OnAgentSit?.Invoke(c, agentSit.AgentData.AgentID); } /// <summary> @@ -9299,64 +9340,64 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// </summary> private void SendCantSitBecauseChildAgentResponse() { - SendAlertMessage("Try moving closer. Can't sit on object because it is not in the same region as you."); + SendAlertMessage("Can't sit on object because it is not in the same region as you."); } - private void HandleSoundTrigger(Packet Pack) + private static void HandleSoundTrigger(LLClientView c, Packet Pack) { SoundTriggerPacket soundTriggerPacket = (SoundTriggerPacket)Pack; // UUIDS are sent as zeroes by the client, substitute agent's id - OnSoundTrigger?.Invoke(soundTriggerPacket.SoundData.SoundID, m_agentId, - m_agentId, m_agentId, + c.OnSoundTrigger?.Invoke(soundTriggerPacket.SoundData.SoundID, c.m_agentId, + c.m_agentId, c.m_agentId, soundTriggerPacket.SoundData.Gain, soundTriggerPacket.SoundData.Position, soundTriggerPacket.SoundData.Handle); } - private void HandleAvatarPickerRequest(Packet Pack) + private static void HandleAvatarPickerRequest(LLClientView c, Packet Pack) { AvatarPickerRequestPacket avRequestQuery = (AvatarPickerRequestPacket)Pack; - if (avRequestQuery.AgentData.SessionID.NotEqual(m_sessionId) || avRequestQuery.AgentData.AgentID.NotEqual(m_agentId)) + if (avRequestQuery.AgentData.SessionID.NotEqual(c.m_sessionId) || avRequestQuery.AgentData.AgentID.NotEqual(c.m_agentId)) return; AvatarPickerRequestPacket.AgentDataBlock Requestdata = avRequestQuery.AgentData; AvatarPickerRequestPacket.DataBlock querydata = avRequestQuery.Data; //m_log.Debug("Agent Sends:" + Utils.BytesToString(querydata.Name)); - OnAvatarPickerRequest?.Invoke(this, Requestdata.AgentID, Requestdata.QueryID, + c.OnAvatarPickerRequest?.Invoke(c, Requestdata.AgentID, Requestdata.QueryID, Utils.BytesToString(querydata.Name)); } - private void HandleAgentDataUpdateRequest(Packet Pack) + private static void HandleAgentDataUpdateRequest(LLClientView c, Packet Pack) { AgentDataUpdateRequestPacket avRequestDataUpdatePacket = (AgentDataUpdateRequestPacket)Pack; - if (avRequestDataUpdatePacket.AgentData.SessionID.NotEqual(m_sessionId) || avRequestDataUpdatePacket.AgentData.AgentID.NotEqual(m_agentId)) + if (avRequestDataUpdatePacket.AgentData.SessionID.NotEqual(c.m_sessionId) || avRequestDataUpdatePacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnAgentDataUpdateRequest?.Invoke(this, avRequestDataUpdatePacket.AgentData.AgentID, avRequestDataUpdatePacket.AgentData.SessionID); + c.OnAgentDataUpdateRequest?.Invoke(c, avRequestDataUpdatePacket.AgentData.AgentID, avRequestDataUpdatePacket.AgentData.SessionID); } - private void HandleUserInfoRequest(Packet Pack) + private static void HandleUserInfoRequest(LLClientView c, Packet _) { - if (OnUserInfoRequest != null) + if (c.OnUserInfoRequest != null) { - OnUserInfoRequest(this); + c.OnUserInfoRequest(c); } else { - SendUserInfoReply(false, true, ""); + c.SendUserInfoReply(false, true, ""); } } - private void HandleUpdateUserInfo(Packet Pack) + private static void HandleUpdateUserInfo(LLClientView c, Packet Pack) { - if(OnUpdateUserInfo is null) + if(c.OnUpdateUserInfo is null) return; UpdateUserInfoPacket updateUserInfo = (UpdateUserInfoPacket)Pack; - if (updateUserInfo.AgentData.SessionID.NotEqual(m_sessionId) || updateUserInfo.AgentData.AgentID.NotEqual(m_agentId)) + if (updateUserInfo.AgentData.SessionID.NotEqual(c.m_sessionId) || updateUserInfo.AgentData.AgentID.NotEqual(c.m_agentId)) return; bool visible = true; @@ -9364,15 +9405,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (DirectoryVisibility == "hidden") visible = false; - OnUpdateUserInfo?.Invoke( updateUserInfo.UserData.IMViaEMail, visible, this); + c.OnUpdateUserInfo?.Invoke( updateUserInfo.UserData.IMViaEMail, visible, c); } - private void HandleSetStartLocationRequest(Packet Pack) + private static void HandleSetStartLocationRequest(LLClientView c, Packet Pack) { SetStartLocationRequestPacket avSetStartLocationRequestPacket = (SetStartLocationRequestPacket)Pack; - if (avSetStartLocationRequestPacket.AgentData.SessionID.NotEqual(m_sessionId) || - avSetStartLocationRequestPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (avSetStartLocationRequestPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || + avSetStartLocationRequestPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; float packX = avSetStartLocationRequestPacket.StartLocationData.LocationPos.X; @@ -9380,7 +9421,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP // Linden Client limitation.. if (packX == 255.5f || packY == 255.5f) { - if (((Scene)m_scene).TryGetScenePresence(m_agentId, out ScenePresence avatar)) + if (c.m_scene.TryGetScenePresence(c.m_agentId, out ScenePresence avatar)) { if (packX == 255.5f) { @@ -9393,47 +9434,47 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - OnSetStartLocationRequest?.Invoke(this, 0, avSetStartLocationRequestPacket.StartLocationData.LocationPos, + c.OnSetStartLocationRequest?.Invoke(c, 0, avSetStartLocationRequestPacket.StartLocationData.LocationPos, avSetStartLocationRequestPacket.StartLocationData.LocationLookAt, avSetStartLocationRequestPacket.StartLocationData.LocationID); } - private void HandleAgentThrottle(Packet Pack) + private static void HandleAgentThrottle(LLClientView c, Packet Pack) { AgentThrottlePacket atpack = (AgentThrottlePacket)Pack; - if (atpack.AgentData.SessionID.NotEqual(m_sessionId) || atpack.AgentData.AgentID.NotEqual(m_agentId)) + if (atpack.AgentData.SessionID.NotEqual(c.m_sessionId) || atpack.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_udpClient.SetThrottles(atpack.Throttle.Throttles); - OnUpdateThrottles?.Invoke(); + c.m_udpClient.SetThrottles(atpack.Throttle.Throttles); + c.OnUpdateThrottles?.Invoke(); } - private void HandleAgentPause(Packet Pack) + private static void HandleAgentPause(LLClientView c, Packet Pack) { - m_udpClient.IsPaused = true; + c.m_udpClient.IsPaused = true; } - private void HandleAgentResume(Packet Pack) + private static void HandleAgentResume(LLClientView c, Packet Pack) { - m_udpClient.IsPaused = false; - m_udpServer.SendPing(m_udpClient); + c.m_udpClient.IsPaused = false; + c.m_udpServer.SendPing(c.m_udpClient); } - private void HandleForceScriptControlRelease(Packet Pack) + private static void HandleForceScriptControlRelease(LLClientView c, Packet _) { - OnForceReleaseControls?.Invoke(this, m_agentId); + c.OnForceReleaseControls?.Invoke(c, c.m_agentId); } #endregion Scene/Avatar #region Objects/m_sceneObjects - private void HandleObjectLink(Packet Pack) + private static void HandleObjectLink(LLClientView c, Packet Pack) { ObjectLinkPacket link = (ObjectLinkPacket)Pack; - if (link.AgentData.SessionID.NotEqual(m_sessionId) || link.AgentData.AgentID.NotEqual(m_agentId)) + if (link.AgentData.SessionID.NotEqual(c.m_sessionId) || link.AgentData.AgentID.NotEqual(c.m_agentId)) return; uint parentprimid = 0; @@ -9447,14 +9488,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP childrenprims.Add(link.ObjectData[i].ObjectLocalID); } } - OnLinkObjects?.Invoke(this, parentprimid, childrenprims); + c.OnLinkObjects?.Invoke(c, parentprimid, childrenprims); } - private void HandleObjectDelink(Packet Pack) + private static void HandleObjectDelink(LLClientView c, Packet Pack) { ObjectDelinkPacket delink = (ObjectDelinkPacket)Pack; - if (delink.AgentData.SessionID.NotEqual(m_sessionId) || delink.AgentData.AgentID.NotEqual(m_agentId)) + if (delink.AgentData.SessionID.NotEqual(c.m_sessionId) || delink.AgentData.AgentID.NotEqual(c.m_agentId)) return; // It appears the prim at index 0 is not always the root prim (for @@ -9467,31 +9508,31 @@ namespace OpenSim.Region.ClientStack.LindenUDP prims.Add(delink.ObjectData[i].ObjectLocalID); } - OnDelinkObjects?.Invoke(prims, this); + c.OnDelinkObjects?.Invoke(prims, c); } - private void HandleObjectAdd(Packet Pack) + private static void HandleObjectAdd(LLClientView c, Packet Pack) { ObjectAddPacket addPacket = (ObjectAddPacket)Pack; - if (addPacket.AgentData.SessionID.NotEqual(m_sessionId) || addPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (addPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || addPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; ObjectAddPacket.ObjectDataBlock datablk = addPacket.ObjectData; PrimitiveBaseShape shape = GetShapeFromAddPacket(addPacket); - OnAddPrim?.Invoke(m_agentId, addPacket.AgentData.GroupID, datablk.RayEnd, + c.OnAddPrim?.Invoke(c.m_agentId, addPacket.AgentData.GroupID, datablk.RayEnd, datablk.Rotation, shape, datablk.BypassRaycast, datablk.RayStart, datablk.RayTargetID, datablk.RayEndIsIntersection, datablk.AddFlags); } - private void HandleObjectShape(Packet Pack) + private static void HandleObjectShape(LLClientView c, Packet Pack) { - if(OnUpdatePrimShape is null) + if(c.OnUpdatePrimShape is null) return; ObjectShapePacket shapePacket = (ObjectShapePacket)Pack; - if (shapePacket.AgentData.SessionID.NotEqual(m_sessionId) || shapePacket.AgentData.AgentID.NotEqual(m_agentId)) + if (shapePacket.AgentData.SessionID.NotEqual(c.m_sessionId) || shapePacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < shapePacket.ObjectData.Length; i++) @@ -9520,144 +9561,141 @@ namespace OpenSim.Region.ClientStack.LindenUDP ProfileHollow = shapePacket.ObjectData[i].ProfileHollow }; - OnUpdatePrimShape?.Invoke(m_agentId, id, shapeData); + c.OnUpdatePrimShape?.Invoke(c.m_agentId, id, shapeData); } } - private void HandleObjectExtraParams(Packet Pack) + private static void HandleObjectExtraParams(LLClientView c, Packet Pack) { ObjectExtraParamsPacket extraPar = (ObjectExtraParamsPacket)Pack; - if (extraPar.AgentData.SessionID.NotEqual(m_sessionId) || extraPar.AgentData.AgentID.NotEqual(m_agentId)) + if (extraPar.AgentData.SessionID.NotEqual(c.m_sessionId) || extraPar.AgentData.AgentID.NotEqual(c.m_agentId)) return; - ObjectExtraParams handlerUpdateExtraParams = OnUpdateExtraParams; - if (handlerUpdateExtraParams != null) + if (c.OnUpdateExtraParams != null) { for (int i = 0; i < extraPar.ObjectData.Length; i++) { - OnUpdateExtraParams?.Invoke(m_agentId, extraPar.ObjectData[i].ObjectLocalID, + c.OnUpdateExtraParams?.Invoke(c.m_agentId, extraPar.ObjectData[i].ObjectLocalID, extraPar.ObjectData[i].ParamType, extraPar.ObjectData[i].ParamInUse, extraPar.ObjectData[i].ParamData); } } } - private void HandleObjectDuplicate(Packet Pack) + private static void HandleObjectDuplicate(LLClientView c, Packet Pack) { - if(OnObjectDuplicate is null) + if(c.OnObjectDuplicate is null) return; ObjectDuplicatePacket dupe = (ObjectDuplicatePacket)Pack; - if (dupe.AgentData.SessionID.NotEqual(m_sessionId) || dupe.AgentData.AgentID.NotEqual(m_agentId)) + if (dupe.AgentData.SessionID.NotEqual(c.m_sessionId) || dupe.AgentData.AgentID.NotEqual(c.m_agentId)) return; -// ObjectDuplicatePacket.AgentDataBlock AgentandGroupData = dupe.AgentData; + UUID rezGroupID = c.IsGroupMember(dupe.AgentData.GroupID) ? dupe.AgentData.GroupID : UUID.Zero; + //ObjectDuplicatePacket.AgentDataBlock AgentandGroupData = dupe.AgentData; for (int i = 0; i < dupe.ObjectData.Length; i++) { - UUID rezGroupID = dupe.AgentData.GroupID; - if(!IsGroupMember(rezGroupID)) - rezGroupID = UUID.Zero; - OnObjectDuplicate?.Invoke(dupe.ObjectData[i].ObjectLocalID, dupe.SharedData.Offset, - dupe.SharedData.DuplicateFlags, m_agentId, + c.OnObjectDuplicate?.Invoke(dupe.ObjectData[i].ObjectLocalID, dupe.SharedData.Offset, + dupe.SharedData.DuplicateFlags, c.m_agentId, rezGroupID); } } - private void HandleRequestMultipleObjects(Packet Pack) + private static void HandleRequestMultipleObjects(LLClientView c, Packet Pack) { - if (OnObjectRequest is null) + if (c.OnObjectRequest is null) return; RequestMultipleObjectsPacket incomingRequest = (RequestMultipleObjectsPacket)Pack; - if (incomingRequest.AgentData.SessionID.NotEqual(m_sessionId) || incomingRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (incomingRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || incomingRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < incomingRequest.ObjectData.Length; i++) - OnObjectRequest?.Invoke(incomingRequest.ObjectData[i].ID, this); + c.OnObjectRequest?.Invoke(incomingRequest.ObjectData[i].ID, c); } - private void HandleObjectSelect(Packet Pack) + private static void HandleObjectSelect(LLClientView c, Packet Pack) { - if(OnObjectSelect is null) + if(c.OnObjectSelect is null) return; ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack; - if (incomingselect.AgentData.SessionID.NotEqual(m_sessionId) || incomingselect.AgentData.AgentID.NotEqual(m_agentId)) + if (incomingselect.AgentData.SessionID.NotEqual(c.m_sessionId) || incomingselect.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<uint> thisSelection = new(); for (int i = 0; i < incomingselect.ObjectData.Length; i++) thisSelection.Add(incomingselect.ObjectData[i].ObjectLocalID); - OnObjectSelect?.Invoke(thisSelection, this); + c.OnObjectSelect?.Invoke(thisSelection, c); } - private void HandleObjectDeselect(Packet Pack) + private static void HandleObjectDeselect(LLClientView c, Packet Pack) { - if(OnObjectDeselect is null) + if(c.OnObjectDeselect is null) return; ObjectDeselectPacket incomingdeselect = (ObjectDeselectPacket)Pack; - if (incomingdeselect.AgentData.SessionID.NotEqual(m_sessionId) || incomingdeselect.AgentData.AgentID.NotEqual(m_agentId)) + if (incomingdeselect.AgentData.SessionID.NotEqual(c.m_sessionId) || incomingdeselect.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < incomingdeselect.ObjectData.Length; i++) { - OnObjectDeselect?.Invoke(incomingdeselect.ObjectData[i].ObjectLocalID, this); + c.OnObjectDeselect?.Invoke(incomingdeselect.ObjectData[i].ObjectLocalID, c); } } - private void HandleObjectPosition(Packet Pack) + private static void HandleObjectPosition(LLClientView c, Packet Pack) { - if (OnUpdatePrimGroupPosition is null) + if (c.OnUpdatePrimGroupPosition is null) return; // DEPRECATED: but till libsecondlife removes it, people will use it ObjectPositionPacket position = (ObjectPositionPacket)Pack; - if (position.AgentData.SessionID.NotEqual(m_sessionId) || position.AgentData.AgentID.NotEqual(m_agentId)) + if (position.AgentData.SessionID.NotEqual(c.m_sessionId) || position.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < position.ObjectData.Length; i++) - OnUpdatePrimGroupPosition?.Invoke(position.ObjectData[i].ObjectLocalID, position.ObjectData[i].Position, this); + c.OnUpdatePrimGroupPosition?.Invoke(position.ObjectData[i].ObjectLocalID, position.ObjectData[i].Position, c); } - private void HandleObjectScale(Packet Pack) + private static void HandleObjectScale(LLClientView c, Packet Pack) { - if (OnUpdatePrimGroupScale is null) + if (c.OnUpdatePrimGroupScale is null) return; // DEPRECATED: but till libsecondlife removes it, people will use it ObjectScalePacket scale = (ObjectScalePacket)Pack; - if (scale.AgentData.SessionID.NotEqual(m_sessionId) || scale.AgentData.AgentID.NotEqual(m_agentId)) + if (scale.AgentData.SessionID.NotEqual(c.m_sessionId) || scale.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < scale.ObjectData.Length; i++) - OnUpdatePrimGroupScale?.Invoke(scale.ObjectData[i].ObjectLocalID, scale.ObjectData[i].Scale, this); + c.OnUpdatePrimGroupScale?.Invoke(scale.ObjectData[i].ObjectLocalID, scale.ObjectData[i].Scale, c); } - private void HandleObjectRotation(Packet Pack) + private static void HandleObjectRotation(LLClientView c, Packet Pack) { - if (OnUpdatePrimGroupRotation is null) + if (c.OnUpdatePrimGroupRotation is null) return; // DEPRECATED: but till libsecondlife removes it, people will use it ObjectRotationPacket rotation = (ObjectRotationPacket)Pack; - if (rotation.AgentData.SessionID.NotEqual(m_sessionId) || rotation.AgentData.AgentID.NotEqual(m_agentId)) + if (rotation.AgentData.SessionID.NotEqual(c.m_sessionId) || rotation.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < rotation.ObjectData.Length; i++) - OnUpdatePrimGroupRotation?.Invoke(rotation.ObjectData[i].ObjectLocalID, rotation.ObjectData[i].Rotation, this); + c.OnUpdatePrimGroupRotation?.Invoke(rotation.ObjectData[i].ObjectLocalID, rotation.ObjectData[i].Rotation, c); } - private void HandleObjectFlagUpdate(Packet Pack) + private static void HandleObjectFlagUpdate(LLClientView c, Packet Pack) { - if(OnUpdatePrimFlags is null) + if(c.OnUpdatePrimFlags is null) return; ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack; - if (flags.AgentData.SessionID.NotEqual(m_sessionId) || flags.AgentData.AgentID.NotEqual(m_agentId)) + if (flags.AgentData.SessionID.NotEqual(c.m_sessionId) || flags.AgentData.AgentID.NotEqual(c.m_agentId)) return; // byte[] data = Pack.ToBytes(); @@ -9670,7 +9708,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP bool IsPhantom = (data[48] != 0) ? true : false; handlerUpdatePrimFlags(flags.AgentData.ObjectLocalID, UsePhysics, IsTemporary, IsPhantom, this); */ - bool UsePhysics = flags.AgentData.UsePhysics; + bool UsePhysics = flags.AgentData.UsePhysics; bool IsPhantom = flags.AgentData.IsPhantom; bool IsTemporary = flags.AgentData.IsTemporary; ObjectFlagUpdatePacket.ExtraPhysicsBlock[] blocks = flags.ExtraPhysics; @@ -9690,29 +9728,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP physdata.GravitationModifier = phsblock.GravityMultiplier; } - OnUpdatePrimFlags?.Invoke(flags.AgentData.ObjectLocalID, UsePhysics, IsTemporary, IsPhantom, physdata, this); + c.OnUpdatePrimFlags?.Invoke(flags.AgentData.ObjectLocalID, UsePhysics, IsTemporary, IsPhantom, physdata, c); } Dictionary<uint, uint> objImageSeqs = null; double lastobjImageSeqsMS = 0.0; - private void HandleObjectImage(Packet Pack) + private static void HandleObjectImage(LLClientView c, Packet Pack) { - if (OnUpdatePrimTexture is null) + if (c.OnUpdatePrimTexture is null) return; ObjectImagePacket imagePack = (ObjectImagePacket)Pack; - if (imagePack.AgentData.SessionID.NotEqual(m_sessionId) || imagePack.AgentData.AgentID.NotEqual(m_agentId)) + if (imagePack.AgentData.SessionID.NotEqual(c.m_sessionId) || imagePack.AgentData.AgentID.NotEqual(c.m_agentId)) return; double now = Util.GetTimeStampMS(); - if(objImageSeqs is null || ( now - lastobjImageSeqsMS > 30000.0)) - { - objImageSeqs = null; // yeah i know superstition... - objImageSeqs = new Dictionary<uint, uint>(16); - } + if(c.objImageSeqs is null || ( now - c.lastobjImageSeqsMS > 30000.0)) + c.objImageSeqs = new Dictionary<uint, uint>(16); - lastobjImageSeqsMS = now; + c.lastobjImageSeqsMS = now; uint seq = Pack.Header.Sequence; uint id; @@ -9721,23 +9756,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP { o = imagePack.ObjectData[i]; id = o.ObjectLocalID; - if(objImageSeqs.TryGetValue(id, out uint lastseq)) + if(c.objImageSeqs.TryGetValue(id, out uint lastseq)) { if(seq <= lastseq) continue; } - objImageSeqs[id] = seq; - OnUpdatePrimTexture?.Invoke(id, o.TextureEntry, this); + c.objImageSeqs[id] = seq; + c.OnUpdatePrimTexture?.Invoke(id, o.TextureEntry, c); } } - private void HandleObjectGrab(Packet Pack) + private static void HandleObjectGrab(LLClientView c, Packet Pack) { - if(OnGrabObject is null) + if(c.OnGrabObject is null) return; ObjectGrabPacket grab = (ObjectGrabPacket)Pack; - if (grab.AgentData.SessionID.NotEqual(m_sessionId) || grab.AgentData.AgentID.NotEqual(m_agentId)) + if (grab.AgentData.SessionID.NotEqual(c.m_sessionId) || grab.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<SurfaceTouchEventArgs> touchArgs = new(); @@ -9757,16 +9792,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP touchArgs.Add(arg); } } - OnGrabObject?.Invoke(grab.ObjectData.LocalID, grab.ObjectData.GrabOffset, this, touchArgs); + c.OnGrabObject?.Invoke(grab.ObjectData.LocalID, grab.ObjectData.GrabOffset, c, touchArgs); } - private void HandleObjectGrabUpdate(Packet Pack) + private static void HandleObjectGrabUpdate(LLClientView c, Packet Pack) { - if (OnGrabUpdate is null) + if (c.OnGrabUpdate is null) return; ObjectGrabUpdatePacket grabUpdate = (ObjectGrabUpdatePacket)Pack; - if (grabUpdate.AgentData.SessionID.NotEqual(m_sessionId) || grabUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (grabUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || grabUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<SurfaceTouchEventArgs> touchArgs = new(); @@ -9787,18 +9822,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - OnGrabUpdate?.Invoke(grabUpdate.ObjectData.ObjectID, grabUpdate.ObjectData.GrabOffsetInitial, - grabUpdate.ObjectData.GrabPosition, this, touchArgs); + c.OnGrabUpdate?.Invoke(grabUpdate.ObjectData.ObjectID, grabUpdate.ObjectData.GrabOffsetInitial, + grabUpdate.ObjectData.GrabPosition, c, touchArgs); } - private void HandleObjectDeGrab(Packet Pack) + private static void HandleObjectDeGrab(LLClientView c, Packet Pack) { - if (OnDeGrabObject is null) + if (c.OnDeGrabObject is null) return; ObjectDeGrabPacket deGrab = (ObjectDeGrabPacket)Pack; - if (deGrab.AgentData.SessionID.NotEqual(m_sessionId) || deGrab.AgentData.AgentID.NotEqual(m_agentId)) + if (deGrab.AgentData.SessionID.NotEqual(c.m_sessionId) || deGrab.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<SurfaceTouchEventArgs> touchArgs = new(); @@ -9818,81 +9853,73 @@ namespace OpenSim.Region.ClientStack.LindenUDP touchArgs.Add(arg); } } - OnDeGrabObject?.Invoke(deGrab.ObjectData.LocalID, this, touchArgs); + c.OnDeGrabObject?.Invoke(deGrab.ObjectData.LocalID, c, touchArgs); } - private void HandleObjectSpinStart(Packet Pack) + private static void HandleObjectSpinStart(LLClientView c, Packet Pack) { //m_log.Warn("[CLIENT]: unhandled ObjectSpinStart packet"); ObjectSpinStartPacket spinStart = (ObjectSpinStartPacket)Pack; - if (spinStart.AgentData.SessionID.NotEqual(m_sessionId) || spinStart.AgentData.AgentID.NotEqual(m_agentId)) - return; - - OnSpinStart?.Invoke(spinStart.ObjectData.ObjectID, this); + if (spinStart.AgentData.SessionID.Equals(c.m_sessionId) && spinStart.AgentData.AgentID.Equals(c.m_agentId)) + c.OnSpinStart?.Invoke(spinStart.ObjectData.ObjectID, c); } - private void HandleObjectSpinUpdate(Packet Pack) + private static void HandleObjectSpinUpdate(LLClientView c, Packet Pack) { //m_log.Warn("[CLIENT]: unhandled ObjectSpinUpdate packet"); ObjectSpinUpdatePacket spinUpdate = (ObjectSpinUpdatePacket)Pack; - if (spinUpdate.AgentData.SessionID.NotEqual(m_sessionId) || spinUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (spinUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || spinUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; spinUpdate.ObjectData.Rotation.GetAxisAngle(out Vector3 axis, out float angle); //m_log.Warn("[CLIENT]: ObjectSpinUpdate packet rot axis:" + axis + " angle:" + angle); - OnSpinUpdate?.Invoke(spinUpdate.ObjectData.ObjectID, spinUpdate.ObjectData.Rotation, this); + c.OnSpinUpdate?.Invoke(spinUpdate.ObjectData.ObjectID, spinUpdate.ObjectData.Rotation, c); } - private void HandleObjectSpinStop(Packet Pack) + private static void HandleObjectSpinStop(LLClientView c, Packet Pack) { //m_log.Warn("[CLIENT]: unhandled ObjectSpinStop packet"); ObjectSpinStopPacket spinStop = (ObjectSpinStopPacket)Pack; - if (spinStop.AgentData.SessionID.NotEqual(m_sessionId) || spinStop.AgentData.AgentID.NotEqual(m_agentId)) - return; - - OnSpinStop?.Invoke(spinStop.ObjectData.ObjectID, this); + if (spinStop.AgentData.SessionID.Equals(c.m_sessionId) && spinStop.AgentData.AgentID.Equals(c.m_agentId)) + c.OnSpinStop?.Invoke(spinStop.ObjectData.ObjectID, c); } - private void HandleObjectDescription(Packet Pack) + private static void HandleObjectDescription(LLClientView c, Packet Pack) { - if(OnObjectDescription is null) + if(c.OnObjectDescription is null) return; ObjectDescriptionPacket objDes = (ObjectDescriptionPacket)Pack; - if (objDes.AgentData.SessionID.NotEqual(m_sessionId) || objDes.AgentData.AgentID.NotEqual(m_agentId)) + if (objDes.AgentData.SessionID.NotEqual(c.m_sessionId) || objDes.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < objDes.ObjectData.Length; i++) - OnObjectDescription?.Invoke(this, objDes.ObjectData[i].LocalID, + c.OnObjectDescription?.Invoke(c, objDes.ObjectData[i].LocalID, Util.FieldToString(objDes.ObjectData[i].Description)); } - private void HandleObjectName(Packet Pack) + private static void HandleObjectName(LLClientView c, Packet Pack) { - if(OnObjectName is null) + if(c.OnObjectName is null) return; ObjectNamePacket objName = (ObjectNamePacket)Pack; - if (objName.AgentData.SessionID.NotEqual(m_sessionId) || objName.AgentData.AgentID.NotEqual(m_agentId)) + if (objName.AgentData.SessionID.NotEqual(c.m_sessionId) || objName.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < objName.ObjectData.Length; i++) - OnObjectName?.Invoke(this, objName.ObjectData[i].LocalID, + c.OnObjectName?.Invoke(c, objName.ObjectData[i].LocalID, Util.FieldToString(objName.ObjectData[i].Name)); } - private void HandleObjectPermissions(Packet Pack) + private static void HandleObjectPermissions(LLClientView c, Packet Pack) { - if (OnObjectPermissions is null) + if (c.OnObjectPermissions is null) return; ObjectPermissionsPacket newobjPerms = (ObjectPermissionsPacket)Pack; - UUID SessionID = newobjPerms.AgentData.SessionID; - if (SessionID.NotEqual(m_sessionId)) - return; - UUID AgentID = newobjPerms.AgentData.AgentID; - if(AgentID.NotEqual(m_agentId)) + if (newobjPerms.AgentData.SessionID.NotEqual(c.m_sessionId) || newobjPerms.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < newobjPerms.ObjectData.Length; i++) @@ -9904,7 +9931,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP uint mask = permChanges.Mask; byte set = permChanges.Set; - OnObjectPermissions?.Invoke(this, AgentID, SessionID, field, localID, mask, set); + c.OnObjectPermissions?.Invoke(c, newobjPerms.AgentData.AgentID, newobjPerms.AgentData.SessionID, field, localID, mask, set); } // Here's our data, @@ -9920,58 +9947,58 @@ namespace OpenSim.Region.ClientStack.LindenUDP // That means multiple object perms may be updated in a single packet. } - private void HandleUndo(Packet Pack) + private static void HandleUndo(LLClientView c, Packet Pack) { - if(OnUndo is null) + if(c.OnUndo is null) return; UndoPacket undoitem = (UndoPacket)Pack; - if (undoitem.AgentData.SessionID.NotEqual(m_sessionId) || undoitem.AgentData.AgentID.NotEqual(m_agentId)) + if (undoitem.AgentData.SessionID.NotEqual(c.m_sessionId) || undoitem.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < undoitem.ObjectData.Length; i++) - OnUndo?.Invoke(this, undoitem.ObjectData[i].ObjectID); + c.OnUndo?.Invoke(c, undoitem.ObjectData[i].ObjectID); } - private void HandleLandUndo(Packet Pack) + private static void HandleLandUndo(LLClientView c, Packet Pack) { UndoLandPacket undolanditem = (UndoLandPacket)Pack; - if (undolanditem.AgentData.SessionID.NotEqual(m_sessionId) || undolanditem.AgentData.AgentID.NotEqual(m_agentId)) + if (undolanditem.AgentData.SessionID.NotEqual(c.m_sessionId) || undolanditem.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnLandUndo?.Invoke(this); + c.OnLandUndo?.Invoke(c); } - private void HandleRedo(Packet Pack) + private static void HandleRedo(LLClientView c, Packet Pack) { - if(OnRedo is null) + if(c.OnRedo is null) return; RedoPacket redoitem = (RedoPacket)Pack; - if (redoitem.AgentData.SessionID.NotEqual(m_sessionId) || redoitem.AgentData.AgentID.NotEqual(m_agentId)) + if (redoitem.AgentData.SessionID.NotEqual(c.m_sessionId) || redoitem.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < redoitem.ObjectData.Length; i++) - OnRedo?.Invoke(this, redoitem.ObjectData[i].ObjectID); + c.OnRedo?.Invoke(c, redoitem.ObjectData[i].ObjectID); } - private void HandleObjectDuplicateOnRay(Packet Pack) + private static void HandleObjectDuplicateOnRay(LLClientView c, Packet Pack) { - if(OnObjectDuplicateOnRay is null) + if(c.OnObjectDuplicateOnRay is null) return; ObjectDuplicateOnRayPacket dupeOnRay = (ObjectDuplicateOnRayPacket)Pack; - if (dupeOnRay.AgentData.SessionID.NotEqual(m_sessionId) || dupeOnRay.AgentData.AgentID.NotEqual(m_agentId)) + if (dupeOnRay.AgentData.SessionID.NotEqual(c.m_sessionId) || dupeOnRay.AgentData.AgentID.NotEqual(c.m_agentId)) return; + UUID rezGroupID = dupeOnRay.AgentData.GroupID; + if (!c.IsGroupMember(rezGroupID)) + rezGroupID = UUID.Zero; + for (int i = 0; i < dupeOnRay.ObjectData.Length; i++) { - UUID rezGroupID = dupeOnRay.AgentData.GroupID; - if(!IsGroupMember(rezGroupID)) - rezGroupID = UUID.Zero; - - OnObjectDuplicateOnRay?.Invoke(dupeOnRay.ObjectData[i].ObjectLocalID, - dupeOnRay.AgentData.DuplicateFlags, m_agentId, rezGroupID, + c.OnObjectDuplicateOnRay?.Invoke(dupeOnRay.ObjectData[i].ObjectLocalID, + dupeOnRay.AgentData.DuplicateFlags, c.m_agentId, rezGroupID, dupeOnRay.AgentData.RayTargetID, dupeOnRay.AgentData.RayEnd, dupeOnRay.AgentData.RayStart, dupeOnRay.AgentData.BypassRaycast, dupeOnRay.AgentData.RayEndIsIntersection, @@ -9979,77 +10006,71 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - private void HandleRequestObjectPropertiesFamily(Packet Pack) + private static void HandleRequestObjectPropertiesFamily(LLClientView c, Packet Pack) { //This powers the little tooltip that appears when you move your mouse over an object RequestObjectPropertiesFamilyPacket packToolTip = (RequestObjectPropertiesFamilyPacket)Pack; - if (packToolTip.AgentData.SessionID.NotEqual(m_sessionId) || packToolTip.AgentData.AgentID.NotEqual(m_agentId)) + if (packToolTip.AgentData.SessionID.NotEqual(c.m_sessionId) || packToolTip.AgentData.AgentID.NotEqual(c.m_agentId)) return; RequestObjectPropertiesFamilyPacket.ObjectDataBlock packObjBlock = packToolTip.ObjectData; - OnRequestObjectPropertiesFamily?.Invoke(this, m_agentId, packObjBlock.RequestFlags, + c.OnRequestObjectPropertiesFamily?.Invoke(c, c.m_agentId, packObjBlock.RequestFlags, packObjBlock.ObjectID); } - private void HandleObjectIncludeInSearch(Packet Pack) + private static void HandleObjectIncludeInSearch(LLClientView c, Packet Pack) { - if(OnObjectIncludeInSearch is null) + if(c.OnObjectIncludeInSearch is null) return; //This lets us set objects to appear in search (stuff like DataSnapshot, etc) ObjectIncludeInSearchPacket packInSearch = (ObjectIncludeInSearchPacket)Pack; - if (packInSearch.AgentData.SessionID.NotEqual(m_sessionId) || packInSearch.AgentData.AgentID.NotEqual(m_agentId)) + if (packInSearch.AgentData.SessionID.NotEqual(c.m_sessionId) || packInSearch.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (ObjectIncludeInSearchPacket.ObjectDataBlock objData in packInSearch.ObjectData) - { - bool inSearch = objData.IncludeInSearch; - uint localID = objData.ObjectLocalID; - OnObjectIncludeInSearch?.Invoke(this, inSearch, localID); - } + c.OnObjectIncludeInSearch?.Invoke(c, objData.IncludeInSearch, objData.ObjectLocalID); } - private void HandleScriptAnswerYes(Packet Pack) + private static void HandleScriptAnswerYes(LLClientView c, Packet Pack) { ScriptAnswerYesPacket scriptAnswer = (ScriptAnswerYesPacket)Pack; - if (scriptAnswer.AgentData.SessionID.NotEqual(m_sessionId) || scriptAnswer.AgentData.AgentID.NotEqual(m_agentId)) - return; - - OnScriptAnswer?.Invoke(this, scriptAnswer.Data.TaskID, scriptAnswer.Data.ItemID, scriptAnswer.Data.Questions); + if (scriptAnswer.AgentData.SessionID.Equals(c.m_sessionId) && scriptAnswer.AgentData.AgentID.Equals(c.m_agentId)) + c.OnScriptAnswer?.Invoke(c, scriptAnswer.Data.TaskID, scriptAnswer.Data.ItemID, scriptAnswer.Data.Questions); } - private void HandleObjectClickAction(Packet Pack) + private static void HandleObjectClickAction(LLClientView c, Packet Pack) { - if(OnObjectClickAction is null) + if(c.OnObjectClickAction is null) return; ObjectClickActionPacket ocpacket = (ObjectClickActionPacket)Pack; - if (ocpacket.AgentData.SessionID.NotEqual(m_sessionId) || ocpacket.AgentData.AgentID.NotEqual(m_agentId)) + if (ocpacket.AgentData.SessionID.NotEqual(c.m_sessionId) || ocpacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (ObjectClickActionPacket.ObjectDataBlock odata in ocpacket.ObjectData) { byte action = odata.ClickAction; uint localID = odata.ObjectLocalID; - OnObjectClickAction?.Invoke(this, localID, action.ToString()); + c.OnObjectClickAction?.Invoke(c, localID, action.ToString()); } } - private void HandleObjectMaterial(Packet Pack) + private static void HandleObjectMaterial(LLClientView c, Packet Pack) { - if(OnObjectMaterial is null) + if(c.OnObjectMaterial is null) return; ObjectMaterialPacket ompacket = (ObjectMaterialPacket)Pack; - if (ompacket.AgentData.SessionID.NotEqual(m_sessionId) || ompacket.AgentData.AgentID.NotEqual(m_agentId)) + if (ompacket.AgentData.SessionID.NotEqual(c.m_sessionId) || ompacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (ObjectMaterialPacket.ObjectDataBlock odata in ompacket.ObjectData) { byte material = odata.Material; uint localID = odata.ObjectLocalID; - OnObjectMaterial?.Invoke(this, localID, material.ToString()); + c.OnObjectMaterial?.Invoke(c, localID, material.ToString()); } } @@ -10057,10 +10078,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP #region Inventory/Asset/Other related packets - private void HandleRequestImage(Packet Pack) + private static void HandleRequestImage(LLClientView c, Packet Pack) { RequestImagePacket imageRequest = (RequestImagePacket)Pack; - if (imageRequest.AgentData.SessionID.NotEqual(m_sessionId) || imageRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (imageRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || imageRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; //handlerTextureRequest = null; @@ -10082,7 +10103,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if ((ImageType)block.Type == ImageType.Baked) args.Priority *= 2.0f; - ImageManager.EnqueueReq(args); + c.ImageManager.EnqueueReq(args); } } @@ -10093,7 +10114,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// <param name="sender"></param> /// <param name="Pack"></param> /// <returns>This parameter may be ignored since we appear to return true whatever happens</returns> - private void HandleTransferRequest(Packet Pack) + private static void HandleTransferRequest(LLClientView c, Packet Pack) { //m_log.Debug("ClientView.ProcessPackets.cs:ProcessInPacket() - Got transfer request"); @@ -10101,13 +10122,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP UUID taskID = UUID.Zero; if (transfer.TransferInfo.SourceType == (int)SourceType.SimInventoryItem) { - if (!(((Scene)m_scene).Permissions.BypassPermissions())) + if (!c.m_scene.Permissions.BypassPermissions()) { // We're spawning a thread because the permissions check can block this thread Util.FireAndForget(delegate { // This requests the asset if needed - HandleSimInventoryTransferRequestWithPermsCheck(this, transfer); + c.HandleSimInventoryTransferRequestWithPermsCheck(c, transfer); }, null, "LLClientView.HandleTransferRequest"); return; @@ -10117,11 +10138,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP { //TransferRequestPacket does not include covenant uuid? //get scene covenant uuid - taskID = m_scene.RegionInfo.RegionSettings.Covenant; + taskID = c.m_scene.RegionInfo.RegionSettings.Covenant; } // This is non-blocking - MakeAssetRequest(transfer, taskID); + c.MakeAssetRequest(transfer, taskID); } private void HandleSimInventoryTransferRequestWithPermsCheck(IClientAPI sender, TransferRequestPacket transfer) @@ -10235,97 +10256,96 @@ namespace OpenSim.Region.ClientStack.LindenUDP } - - private void HandleAssetUploadRequest(Packet Pack) + private static void HandleAssetUploadRequest(LLClientView c, Packet Pack) { AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack; // m_log.Debug("upload request " + request.ToString()); // m_log.Debug("upload request was for assetid: " + request.AssetBlock.TransactionID.Combine(this.SecureSessionId).ToString()); - UUID temp = UUID.Combine(request.AssetBlock.TransactionID, SecureSessionId); + UUID temp = UUID.Combine(request.AssetBlock.TransactionID, c.SecureSessionId); - OnAssetUploadRequest?.Invoke(this, temp, + c.OnAssetUploadRequest?.Invoke(c, temp, request.AssetBlock.TransactionID, request.AssetBlock.Type, request.AssetBlock.AssetData, request.AssetBlock.StoreLocal, request.AssetBlock.Tempfile); } - private void HandleRequestXfer(Packet Pack) + private static void HandleRequestXfer(LLClientView c, Packet Pack) { RequestXferPacket xferReq = (RequestXferPacket)Pack; - OnRequestXfer?.Invoke(this, xferReq.XferID.ID, Util.FieldToString(xferReq.XferID.Filename)); + c.OnRequestXfer?.Invoke(c, xferReq.XferID.ID, Util.FieldToString(xferReq.XferID.Filename)); } - private void HandleSendXferPacket(Packet Pack) + private static void HandleSendXferPacket(LLClientView c, Packet Pack) { SendXferPacketPacket xferRec = (SendXferPacketPacket)Pack; - OnXferReceive?.Invoke(this, xferRec.XferID.ID, xferRec.XferID.Packet, xferRec.DataPacket.Data); + c.OnXferReceive?.Invoke(c, xferRec.XferID.ID, xferRec.XferID.Packet, xferRec.DataPacket.Data); } - private void HandleConfirmXferPacket(Packet Pack) + private static void HandleConfirmXferPacket(LLClientView c, Packet Pack) { ConfirmXferPacketPacket confirmXfer = (ConfirmXferPacketPacket)Pack; - OnConfirmXfer?.Invoke(this, confirmXfer.XferID.ID, confirmXfer.XferID.Packet); + c.OnConfirmXfer?.Invoke(c, confirmXfer.XferID.ID, confirmXfer.XferID.Packet); } - private void HandleAbortXfer(Packet Pack) + private static void HandleAbortXfer(LLClientView c, Packet Pack) { AbortXferPacket abortXfer = (AbortXferPacket)Pack; - OnAbortXfer?.Invoke(this, abortXfer.XferID.ID); + c.OnAbortXfer?.Invoke(c, abortXfer.XferID.ID); } - private void HandleCreateInventoryFolder(Packet Pack) + private static void HandleCreateInventoryFolder(LLClientView c, Packet Pack) { CreateInventoryFolderPacket invFolder = (CreateInventoryFolderPacket)Pack; - if (invFolder.AgentData.SessionID.NotEqual(m_sessionId) || invFolder.AgentData.AgentID.NotEqual(m_agentId)) + if (invFolder.AgentData.SessionID.NotEqual(c.m_sessionId) || invFolder.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnCreateNewInventoryFolder?.Invoke(this, invFolder.FolderData.FolderID, + c.OnCreateNewInventoryFolder?.Invoke(c, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type, Util.FieldToString(invFolder.FolderData.Name), invFolder.FolderData.ParentID); } - private void HandleUpdateInventoryFolder(Packet Pack) + private static void HandleUpdateInventoryFolder(LLClientView c, Packet Pack) { - if (OnUpdateInventoryFolder is null) + if (c.OnUpdateInventoryFolder is null) return; UpdateInventoryFolderPacket invFolderx = (UpdateInventoryFolderPacket)Pack; - if (invFolderx.AgentData.SessionID.NotEqual(m_sessionId) || invFolderx.AgentData.AgentID.NotEqual(m_agentId)) + if (invFolderx.AgentData.SessionID.NotEqual(c.m_sessionId) || invFolderx.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < invFolderx.FolderData.Length; i++) { - OnUpdateInventoryFolder?.Invoke(this, invFolderx.FolderData[i].FolderID, + c.OnUpdateInventoryFolder?.Invoke(c, invFolderx.FolderData[i].FolderID, (ushort)invFolderx.FolderData[i].Type, Util.FieldToString(invFolderx.FolderData[i].Name), invFolderx.FolderData[i].ParentID); } } - private void HandleMoveInventoryFolder(Packet Pack) + private static void HandleMoveInventoryFolder(LLClientView c, Packet Pack) { - if (OnMoveInventoryFolder is null) + if (c.OnMoveInventoryFolder is null) return; MoveInventoryFolderPacket invFoldery = (MoveInventoryFolderPacket)Pack; - if (invFoldery.AgentData.SessionID.NotEqual(m_sessionId) || invFoldery.AgentData.AgentID.NotEqual(m_agentId)) + if (invFoldery.AgentData.SessionID.NotEqual(c.m_sessionId) || invFoldery.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < invFoldery.InventoryData.Length; i++) { - OnMoveInventoryFolder?.Invoke(this, invFoldery.InventoryData[i].FolderID, + c.OnMoveInventoryFolder?.Invoke(c, invFoldery.InventoryData[i].FolderID, invFoldery.InventoryData[i].ParentID); } } - private void HandleCreateInventoryItem(Packet Pack) + private static void HandleCreateInventoryItem(LLClientView c, Packet Pack) { CreateInventoryItemPacket createItem = (CreateInventoryItemPacket)Pack; - if (createItem.AgentData.SessionID.NotEqual(m_sessionId) || createItem.AgentData.AgentID.NotEqual(m_agentId)) + if (createItem.AgentData.SessionID.NotEqual(c.m_sessionId) || createItem.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnCreateNewInventoryItem?.Invoke(this, createItem.InventoryBlock.TransactionID, + c.OnCreateNewInventoryItem?.Invoke(c, createItem.InventoryBlock.TransactionID, createItem.InventoryBlock.FolderID, createItem.InventoryBlock.CallbackID, Util.FieldToString(createItem.InventoryBlock.Description), @@ -10337,14 +10357,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP Util.UnixTimeSinceEpoch()); } - private void HandleLinkInventoryItem(Packet Pack) + private static void HandleLinkInventoryItem(LLClientView c, Packet Pack) { LinkInventoryItemPacket createLink = (LinkInventoryItemPacket)Pack; - if (createLink.AgentData.SessionID.NotEqual(m_sessionId) || createLink.AgentData.AgentID.NotEqual(m_agentId)) + if (createLink.AgentData.SessionID.NotEqual(c.m_sessionId) || createLink.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnLinkInventoryItem?.Invoke( - this, + c.OnLinkInventoryItem?.Invoke( + c, createLink.InventoryBlock.TransactionID, createLink.InventoryBlock.FolderID, createLink.InventoryBlock.CallbackID, @@ -10355,13 +10375,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP createLink.InventoryBlock.OldItemID); } - private void HandleFetchInventory(Packet Pack) + private static void HandleFetchInventory(LLClientView c, Packet Pack) { - if (OnFetchInventory is null) + if (c.OnFetchInventory is null) return; FetchInventoryPacket FetchInventoryx = (FetchInventoryPacket)Pack; - if (FetchInventoryx.AgentData.SessionID.NotEqual(m_sessionId) || FetchInventoryx.AgentData.AgentID.NotEqual(m_agentId)) + if (FetchInventoryx.AgentData.SessionID.NotEqual(c.m_sessionId) || FetchInventoryx.AgentData.AgentID.NotEqual(c.m_agentId)) return; FetchInventoryPacket.InventoryDataBlock[] data = FetchInventoryx.InventoryData; @@ -10375,37 +10395,37 @@ namespace OpenSim.Region.ClientStack.LindenUDP owners[i] = data[i].OwnerID; } - OnFetchInventory?.Invoke(this, items, owners); + c.OnFetchInventory?.Invoke(c, items, owners); } - private void HandleFetchInventoryDescendents(Packet Pack) + private static void HandleFetchInventoryDescendents(LLClientView c, Packet Pack) { FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack; - if (Fetch.AgentData.SessionID.NotEqual(m_sessionId) || Fetch.AgentData.AgentID.NotEqual(m_agentId)) + if (Fetch.AgentData.SessionID.NotEqual(c.m_sessionId) || Fetch.AgentData.AgentID.NotEqual(c.m_agentId)) return; FetchInventoryDescendentsPacket.InventoryDataBlock data = Fetch.InventoryData; - OnFetchInventoryDescendents?.Invoke(this, data.FolderID, data.OwnerID, + c.OnFetchInventoryDescendents?.Invoke(c, data.FolderID, data.OwnerID, data.FetchFolders, data.FetchItems, data.SortOrder); } - private void HandlePurgeInventoryDescendents(Packet Pack) + private static void HandlePurgeInventoryDescendents(LLClientView c, Packet Pack) { PurgeInventoryDescendentsPacket Purge = (PurgeInventoryDescendentsPacket)Pack; - if (Purge.AgentData.SessionID.NotEqual(m_sessionId) || Purge.AgentData.AgentID.NotEqual(m_agentId)) + if (Purge.AgentData.SessionID.NotEqual(c.m_sessionId) || Purge.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnPurgeInventoryDescendents?.Invoke(this, Purge.InventoryData.FolderID); + c.OnPurgeInventoryDescendents?.Invoke(c, Purge.InventoryData.FolderID); } - private void HandleUpdateInventoryItem(Packet Pack) + private static void HandleUpdateInventoryItem(LLClientView c, Packet Pack) { - if (OnUpdateInventoryItem is null) + if (c.OnUpdateInventoryItem is null) return; UpdateInventoryItemPacket inventoryItemUpdate = (UpdateInventoryItemPacket)Pack; - if (inventoryItemUpdate.AgentData.SessionID.NotEqual(m_sessionId) || inventoryItemUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (inventoryItemUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || inventoryItemUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0; i < inventoryItemUpdate.InventoryData.Length; i++) @@ -10428,43 +10448,43 @@ namespace OpenSim.Region.ClientStack.LindenUDP Flags = inventoryItemUpdate.InventoryData[i].Flags }; - OnUpdateInventoryItem?.Invoke(this, inventoryItemUpdate.InventoryData[i].TransactionID, + c.OnUpdateInventoryItem?.Invoke(c, inventoryItemUpdate.InventoryData[i].TransactionID, inventoryItemUpdate.InventoryData[i].ItemID, itemUpd); } } - private void HandleCopyInventoryItem(Packet Pack) + private static void HandleCopyInventoryItem(LLClientView c, Packet Pack) { - if(OnCopyInventoryItem is null) + if(c.OnCopyInventoryItem is null) return; CopyInventoryItemPacket copyitem = (CopyInventoryItemPacket)Pack; - if (copyitem.AgentData.SessionID.NotEqual(m_sessionId) || copyitem.AgentData.AgentID.NotEqual(m_agentId)) + if (copyitem.AgentData.SessionID.NotEqual(c.m_sessionId) || copyitem.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (CopyInventoryItemPacket.InventoryDataBlock datablock in copyitem.InventoryData) { - OnCopyInventoryItem?.Invoke(this, datablock.CallbackID, datablock.OldAgentID, + c.OnCopyInventoryItem?.Invoke(c, datablock.CallbackID, datablock.OldAgentID, datablock.OldItemID, datablock.NewFolderID, Util.FieldToString(datablock.NewName)); } } - private void HandleMoveInventoryItem(Packet Pack) + private static void HandleMoveInventoryItem(LLClientView c, Packet Pack) { - if (OnMoveInventoryItem is null) + if (c.OnMoveInventoryItem is null) return; MoveInventoryItemPacket moveitem = (MoveInventoryItemPacket)Pack; - if (moveitem.AgentData.SessionID.NotEqual(m_sessionId) || moveitem.AgentData.AgentID.NotEqual(m_agentId)) + if (moveitem.AgentData.SessionID.NotEqual(c.m_sessionId) || moveitem.AgentData.AgentID.NotEqual(c.m_agentId)) return; InventoryItemBase itm = null; List<InventoryItemBase> items = new(); foreach (MoveInventoryItemPacket.InventoryDataBlock datablock in moveitem.InventoryData) { - itm = new InventoryItemBase(datablock.ItemID, m_agentId) + itm = new InventoryItemBase(datablock.ItemID, c.m_agentId) { Folder = datablock.FolderID, Name = Util.FieldToString(datablock.NewName) @@ -10473,16 +10493,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP //m_log.DebugFormat("[XXX] new name: {0}", itm.Name); items.Add(itm); } - OnMoveInventoryItem?.Invoke(this, items); + c.OnMoveInventoryItem?.Invoke(c, items); } - private void HandleRemoveInventoryItem(Packet Pack) + private static void HandleRemoveInventoryItem(LLClientView c, Packet Pack) { - if(OnRemoveInventoryItem is null) + if(c.OnRemoveInventoryItem is null) return; RemoveInventoryItemPacket removeItem = (RemoveInventoryItemPacket)Pack; - if (removeItem.AgentData.SessionID.NotEqual(m_sessionId) || removeItem.AgentData.AgentID.NotEqual(m_agentId)) + if (removeItem.AgentData.SessionID.NotEqual(c.m_sessionId) || removeItem.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<UUID> uuids = new(removeItem.InventoryData.Length); @@ -10490,16 +10510,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP { uuids.Add(datablock.ItemID); } - OnRemoveInventoryItem?.Invoke(this, uuids); + c.OnRemoveInventoryItem?.Invoke(c, uuids); } - private void HandleRemoveInventoryFolder(Packet Pack) + private static void HandleRemoveInventoryFolder(LLClientView c, Packet Pack) { - if (OnRemoveInventoryFolder is null) + if (c.OnRemoveInventoryFolder is null) return; RemoveInventoryFolderPacket removeFolder = (RemoveInventoryFolderPacket)Pack; - if (removeFolder.AgentData.SessionID.NotEqual(m_sessionId) || removeFolder.AgentData.AgentID.NotEqual(m_agentId)) + if (removeFolder.AgentData.SessionID.NotEqual(c.m_sessionId) || removeFolder.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<UUID> uuids = new(removeFolder.FolderData.Length); @@ -10507,48 +10527,48 @@ namespace OpenSim.Region.ClientStack.LindenUDP { uuids.Add(datablock.FolderID); } - OnRemoveInventoryFolder?.Invoke(this, uuids); + c.OnRemoveInventoryFolder?.Invoke(c, uuids); } - private void HandleRemoveInventoryObjects(Packet Pack) + private static void HandleRemoveInventoryObjects(LLClientView c, Packet Pack) { - if (OnRemoveInventoryFolder is null || OnRemoveInventoryItem is null) + if (c.OnRemoveInventoryFolder is null || c.OnRemoveInventoryItem is null) return; RemoveInventoryObjectsPacket removeObject = (RemoveInventoryObjectsPacket)Pack; - if (removeObject.AgentData.SessionID.NotEqual(m_sessionId) || removeObject.AgentData.AgentID.NotEqual(m_agentId)) + if (removeObject.AgentData.SessionID.NotEqual(c.m_sessionId) || removeObject.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<UUID> uuids = new(removeObject.FolderData.Length); foreach (RemoveInventoryObjectsPacket.FolderDataBlock datablock in removeObject.FolderData) uuids.Add(datablock.FolderID); - OnRemoveInventoryFolder?.Invoke(this, uuids); + c.OnRemoveInventoryFolder?.Invoke(c, uuids); uuids.Clear(); foreach (RemoveInventoryObjectsPacket.ItemDataBlock datablock in removeObject.ItemData) uuids.Add(datablock.ItemID); - OnRemoveInventoryItem?.Invoke(this, uuids); + c.OnRemoveInventoryItem?.Invoke(c, uuids); } - private void HandleRequestTaskInventory(Packet Pack) + private static void HandleRequestTaskInventory(LLClientView c, Packet Pack) { RequestTaskInventoryPacket requesttask = (RequestTaskInventoryPacket)Pack; - if (requesttask.AgentData.SessionID.NotEqual(m_sessionId) || requesttask.AgentData.AgentID.NotEqual(m_agentId)) + if (requesttask.AgentData.SessionID.NotEqual(c.m_sessionId) || requesttask.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnRequestTaskInventory?.Invoke(this, requesttask.InventoryData.LocalID); + c.OnRequestTaskInventory?.Invoke(c, requesttask.InventoryData.LocalID); } - private void HandleUpdateTaskInventory(Packet Pack) + private static void HandleUpdateTaskInventory(LLClientView c, Packet Pack) { - if (OnUpdateTaskInventory is null) + if (c.OnUpdateTaskInventory is null) return; UpdateTaskInventoryPacket updatetask = (UpdateTaskInventoryPacket)Pack; if (updatetask.UpdateData.Key != 0) return; // only do inventory not assets - if (updatetask.AgentData.SessionID.NotEqual(m_sessionId) || updatetask.AgentData.AgentID.NotEqual(m_agentId)) + if (updatetask.AgentData.SessionID.NotEqual(c.m_sessionId) || updatetask.AgentData.AgentID.NotEqual(c.m_agentId)) return; TaskInventoryItem newTaskItem = new() @@ -10577,39 +10597,39 @@ namespace OpenSim.Region.ClientStack.LindenUDP CreationDate = (uint)updatetask.InventoryData.CreationDate }; - OnUpdateTaskInventory?.Invoke(this, updatetask.InventoryData.TransactionID, + c.OnUpdateTaskInventory?.Invoke(c, updatetask.InventoryData.TransactionID, newTaskItem, updatetask.UpdateData.LocalID); } - private void HandleRemoveTaskInventory(Packet Pack) + private static void HandleRemoveTaskInventory(LLClientView c, Packet Pack) { RemoveTaskInventoryPacket removeTask = (RemoveTaskInventoryPacket)Pack; - if (removeTask.AgentData.SessionID.NotEqual(m_sessionId) || removeTask.AgentData.AgentID.NotEqual(m_agentId)) + if (removeTask.AgentData.SessionID.NotEqual(c.m_sessionId) || removeTask.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnRemoveTaskItem?.Invoke(this, removeTask.InventoryData.ItemID, removeTask.InventoryData.LocalID); + c.OnRemoveTaskItem?.Invoke(c, removeTask.InventoryData.ItemID, removeTask.InventoryData.LocalID); } - private void HandleMoveTaskInventory(Packet Pack) + private static void HandleMoveTaskInventory(LLClientView c, Packet Pack) { MoveTaskInventoryPacket moveTaskInventoryPacket = (MoveTaskInventoryPacket)Pack; - if (moveTaskInventoryPacket.AgentData.SessionID.NotEqual(m_sessionId) || moveTaskInventoryPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (moveTaskInventoryPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || moveTaskInventoryPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnMoveTaskItem?.Invoke( - this, moveTaskInventoryPacket.AgentData.FolderID, + c.OnMoveTaskItem?.Invoke( + c, moveTaskInventoryPacket.AgentData.FolderID, moveTaskInventoryPacket.InventoryData.LocalID, moveTaskInventoryPacket.InventoryData.ItemID); } - private void HandleRezScript(Packet Pack) + private static void HandleRezScript(LLClientView c, Packet Pack) { - if(OnRezScript is null) + if(c.OnRezScript is null) return; //m_log.Debug(Pack.ToString()); RezScriptPacket rezScriptx = (RezScriptPacket)Pack; - if (rezScriptx.AgentData.SessionID.NotEqual(m_sessionId) || rezScriptx.AgentData.AgentID.NotEqual(m_agentId)) + if (rezScriptx.AgentData.SessionID.NotEqual(c.m_sessionId) || rezScriptx.AgentData.AgentID.NotEqual(c.m_agentId)) return; InventoryItemBase item = new() @@ -10635,40 +10655,40 @@ namespace OpenSim.Region.ClientStack.LindenUDP CreationDate = rezScriptx.InventoryBlock.CreationDate }; - OnRezScript?.Invoke(this, item, rezScriptx.InventoryBlock.TransactionID, rezScriptx.UpdateBlock.ObjectLocalID); + c.OnRezScript?.Invoke(c, item, rezScriptx.InventoryBlock.TransactionID, rezScriptx.UpdateBlock.ObjectLocalID); } - private void HandleMapLayerRequest(Packet Pack) + private static void HandleMapLayerRequest(LLClientView c, Packet Pack) { - RequestMapLayer(); + c.RequestMapLayer(); } - private void HandleMapBlockRequest(Packet Pack) + private static void HandleMapBlockRequest(LLClientView c, Packet Pack) { MapBlockRequestPacket MapRequest = (MapBlockRequestPacket)Pack; - if (MapRequest.AgentData.SessionID.NotEqual(m_sessionId) || MapRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (MapRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || MapRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnRequestMapBlocks?.Invoke(this, MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, + c.OnRequestMapBlocks?.Invoke(c, MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, MapRequest.PositionData.MaxX, MapRequest.PositionData.MaxY, MapRequest.AgentData.Flags); } - private void HandleMapNameRequest(Packet Pack) + private static void HandleMapNameRequest(LLClientView c, Packet Pack) { MapNameRequestPacket map = (MapNameRequestPacket)Pack; - if (map.AgentData.SessionID.NotEqual(m_sessionId) || map.AgentData.AgentID.NotEqual(m_agentId)) + if (map.AgentData.SessionID.NotEqual(c.m_sessionId) || map.AgentData.AgentID.NotEqual(c.m_agentId)) return; - string mapName = (map.NameData.Name.Length == 0) ? m_scene.RegionInfo.RegionName : + string mapName = map.NameData.Name.Length == 0 ? c.m_scene.RegionInfo.RegionName : Util.UTF8.GetString(map.NameData.Name, 0, map.NameData.Name.Length - 1); - OnMapNameRequest?.Invoke(this, mapName, map.AgentData.Flags); + c.OnMapNameRequest?.Invoke(c, mapName, map.AgentData.Flags); } - private void HandleTeleportLandmarkRequest(Packet Pack) + private static void HandleTeleportLandmarkRequest(LLClientView c, Packet Pack) { TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack; - if (tpReq.Info.SessionID.NotEqual(m_sessionId) || tpReq.Info.AgentID.NotEqual(m_agentId)) + if (tpReq.Info.SessionID.NotEqual(c.m_sessionId) || tpReq.Info.AgentID.NotEqual(c.m_agentId)) return; UUID lmid = tpReq.Info.LandmarkID; @@ -10676,20 +10696,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (!lmid.IsZero()) { //AssetBase lma = m_assetCache.GetAsset(lmid, false); - AssetBase lma = m_assetService.Get(lmid.ToString()); + AssetBase lma = c.m_assetService.Get(lmid.ToString()); if (lma is null) { // Failed to find landmark // Let's try to search in the user's home asset server - lma = FindAssetInUserAssetServer(lmid.ToString()); + lma = c.FindAssetInUserAssetServer(lmid.ToString()); if (lma is null) { // Really doesn't exist m_log.WarnFormat("[llClient]: landmark asset {0} not found",lmid.ToString()); - SendTeleportFailed("Could not find the landmark asset data"); + c.SendTeleportFailed("Could not find the landmark asset data"); return; } } @@ -10701,27 +10721,27 @@ namespace OpenSim.Region.ClientStack.LindenUDP catch (NullReferenceException) { // asset not found generates null ref inside the assetlandmark constructor. - SendTeleportFailed("Could not find the landmark asset data"); + c.SendTeleportFailed("Could not find the landmark asset data"); return; } } else { // Teleport home request - OnTeleportHomeRequest?.Invoke(m_agentId, this); + c.OnTeleportHomeRequest?.Invoke(c.m_agentId, c); return; } - OnTeleportLandmarkRequest?.Invoke(this, lm); + c.OnTeleportLandmarkRequest?.Invoke(c, lm); } - private void HandleTeleportCancel(Packet Pack) + private static void HandleTeleportCancel(LLClientView c, Packet Pack) { TeleportCancelPacket pkt = (TeleportCancelPacket) Pack; - if(pkt.Info.AgentID.NotEqual(m_agentId) || pkt.Info.SessionID.NotEqual(m_sessionId)) + if(pkt.Info.AgentID.NotEqual(c.m_agentId) || pkt.Info.SessionID.NotEqual(c.m_sessionId)) return; - OnTeleportCancel?.Invoke(this); + c.OnTeleportCancel?.Invoke(c); } private AssetBase FindAssetInUserAssetServer(string id) @@ -10737,89 +10757,90 @@ namespace OpenSim.Region.ClientStack.LindenUDP return null; } - private void HandleTeleportLocationRequest(Packet Pack) + private static void HandleTeleportLocationRequest(LLClientView c, Packet Pack) { - if(OnTeleportLocationRequest is null) + if(c.OnTeleportLocationRequest is null) { - SendTeleportFailed("Could not process the teleport"); + c.SendTeleportFailed("Could not process the teleport"); return; } TeleportLocationRequestPacket tpLocReq = (TeleportLocationRequestPacket)Pack; - if (tpLocReq.AgentData.SessionID.NotEqual(m_sessionId) || tpLocReq.AgentData.AgentID.NotEqual(m_agentId)) + if (tpLocReq.AgentData.SessionID.NotEqual(c.m_sessionId) || tpLocReq.AgentData.AgentID.NotEqual(c.m_agentId)) return; // Adjust teleport location to base of a larger region if requested to teleport to a sub-region Util.RegionHandleToWorldLoc(tpLocReq.Info.RegionHandle, out uint locX, out uint locY); - if ((locX >= m_scene.RegionInfo.WorldLocX) - && (locX < (m_scene.RegionInfo.WorldLocX + m_scene.RegionInfo.RegionSizeX)) - && (locY >= m_scene.RegionInfo.WorldLocY) - && (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY))) + RegionInfo ri = c.m_scene.RegionInfo; + if ((locX >= ri.WorldLocX) + && (locX < (ri.WorldLocX + ri.RegionSizeX)) + && (locY >= ri.WorldLocY) + && (locY < (ri.WorldLocY + ri.RegionSizeY))) { - tpLocReq.Info.RegionHandle = m_scene.RegionInfo.RegionHandle; - tpLocReq.Info.Position.X += locX - m_scene.RegionInfo.WorldLocX; - tpLocReq.Info.Position.Y += locY - m_scene.RegionInfo.WorldLocY; + tpLocReq.Info.RegionHandle = ri.RegionHandle; + tpLocReq.Info.Position.X += locX - ri.WorldLocX; + tpLocReq.Info.Position.Y += locY - ri.WorldLocY; } - OnTeleportLocationRequest?.Invoke(this, tpLocReq.Info.RegionHandle, tpLocReq.Info.Position, + c.OnTeleportLocationRequest?.Invoke(c, tpLocReq.Info.RegionHandle, tpLocReq.Info.Position, tpLocReq.Info.LookAt, 16); } #endregion Inventory/Asset/Other related packets - private void HandleUUIDNameRequest(Packet Pack) + private static void HandleUUIDNameRequest(LLClientView c, Packet Pack) { - if(OnNameFromUUIDRequest is null) + if(c.OnNameFromUUIDRequest is null) return; - ScenePresence sp = (ScenePresence)SceneAgent; + ScenePresence sp = (ScenePresence)c.SceneAgent; if(sp is null || sp.IsDeleted || (sp.IsInTransit && !sp.IsInLocalTransit)) return; UUIDNameRequestPacket incoming = (UUIDNameRequestPacket)Pack; foreach (UUIDNameRequestPacket.UUIDNameBlockBlock UUIDBlock in incoming.UUIDNameBlock) - OnNameFromUUIDRequest?.Invoke(UUIDBlock.ID, this); + c.OnNameFromUUIDRequest?.Invoke(UUIDBlock.ID, c); } #region Parcel related packets - private void HandleRegionHandleRequest(Packet Pack) + private static void HandleRegionHandleRequest(LLClientView c, Packet Pack) { RegionHandleRequestPacket rhrPack = (RegionHandleRequestPacket)Pack; - OnRegionHandleRequest?.Invoke(this, rhrPack.RequestBlock.RegionID); + c.OnRegionHandleRequest?.Invoke(c, rhrPack.RequestBlock.RegionID); } - private void HandleParcelInfoRequest(Packet Pack) + private static void HandleParcelInfoRequest(LLClientView c, Packet Pack) { - if(OnParcelInfoRequest is null) + if(c.OnParcelInfoRequest is null) return; ParcelInfoRequestPacket pirPack = (ParcelInfoRequestPacket)Pack; - if (pirPack.AgentData.SessionID.NotEqual(m_sessionId) || pirPack.AgentData.AgentID.NotEqual(m_agentId)) + if (pirPack.AgentData.SessionID.NotEqual(c.m_sessionId) || pirPack.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelInfoRequest?.Invoke(this, pirPack.Data.ParcelID); + c.OnParcelInfoRequest?.Invoke(c, pirPack.Data.ParcelID); } - private void HandleParcelAccessListRequest(Packet Pack) + private static void HandleParcelAccessListRequest(LLClientView c, Packet Pack) { ParcelAccessListRequestPacket requestPacket = (ParcelAccessListRequestPacket)Pack; - if (requestPacket.AgentData.SessionID.NotEqual(m_sessionId) || requestPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (requestPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || requestPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelAccessListRequest?.Invoke(requestPacket.AgentData.AgentID, requestPacket.AgentData.SessionID, + c.OnParcelAccessListRequest?.Invoke(requestPacket.AgentData.AgentID, requestPacket.AgentData.SessionID, requestPacket.Data.Flags, requestPacket.Data.SequenceID, - requestPacket.Data.LocalID, this); + requestPacket.Data.LocalID, c); } - private void HandleParcelAccessListUpdate(Packet Pack) + private static void HandleParcelAccessListUpdate(LLClientView c, Packet Pack) { - if(OnParcelAccessListUpdateRequest is null) + if(c.OnParcelAccessListUpdateRequest is null) return; ParcelAccessListUpdatePacket updatePacket = (ParcelAccessListUpdatePacket)Pack; - if (updatePacket.AgentData.SessionID.NotEqual(m_sessionId) || updatePacket.AgentData.AgentID.NotEqual(m_agentId)) + if (updatePacket.AgentData.SessionID.NotEqual(c.m_sessionId) || updatePacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; // viewers do send estimated number of packets and sequenceID, but don't seem reliable. @@ -10835,56 +10856,56 @@ namespace OpenSim.Region.ClientStack.LindenUDP entries.Add(entry); } - OnParcelAccessListUpdateRequest?.Invoke(updatePacket.AgentData.AgentID, + c.OnParcelAccessListUpdateRequest?.Invoke(updatePacket.AgentData.AgentID, updatePacket.Data.Flags, updatePacket.Data.TransactionID, updatePacket.Data.LocalID, - entries, this); + entries, c); } - private void HandleParcelPropertiesRequest(Packet Pack) + private static void HandleParcelPropertiesRequest(LLClientView c, Packet Pack) { ParcelPropertiesRequestPacket propertiesRequest = (ParcelPropertiesRequestPacket)Pack; - if (propertiesRequest.AgentData.SessionID.NotEqual(m_sessionId) || propertiesRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (propertiesRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || propertiesRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; ParcelPropertiesRequestPacket.ParcelDataBlock pdb = propertiesRequest.ParcelData; - OnParcelPropertiesRequest?.Invoke((int)MathF.Round(pdb.West), (int)MathF.Round(pdb.South), + c.OnParcelPropertiesRequest?.Invoke((int)MathF.Round(pdb.West), (int)MathF.Round(pdb.South), (int)MathF.Round(pdb.East), (int)MathF.Round(pdb.North), - pdb.SequenceID, pdb.SnapSelection, this); + pdb.SequenceID, pdb.SnapSelection, c); } - private void HandleParcelDivide(Packet Pack) + private static void HandleParcelDivide(LLClientView c, Packet Pack) { ParcelDividePacket landDivide = (ParcelDividePacket)Pack; - if (landDivide.AgentData.SessionID.NotEqual(m_sessionId) || landDivide.AgentData.AgentID.NotEqual(m_agentId)) + if (landDivide.AgentData.SessionID.NotEqual(c.m_sessionId) || landDivide.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelDivideRequest?.Invoke((int)MathF.Round(landDivide.ParcelData.West), + c.OnParcelDivideRequest?.Invoke((int)MathF.Round(landDivide.ParcelData.West), (int)MathF.Round(landDivide.ParcelData.South), (int)Math.Round(landDivide.ParcelData.East), - (int)MathF.Round(landDivide.ParcelData.North), this); + (int)MathF.Round(landDivide.ParcelData.North), c); } - private void HandleParcelJoin(Packet Pack) + private static void HandleParcelJoin(LLClientView c, Packet Pack) { ParcelJoinPacket landJoin = (ParcelJoinPacket)Pack; - if (landJoin.AgentData.SessionID.NotEqual(m_sessionId) || landJoin.AgentData.AgentID.NotEqual(m_agentId)) + if (landJoin.AgentData.SessionID.NotEqual(c.m_sessionId) || landJoin.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelJoinRequest?.Invoke((int)MathF.Round(landJoin.ParcelData.West), + c.OnParcelJoinRequest?.Invoke((int)MathF.Round(landJoin.ParcelData.West), (int)MathF.Round(landJoin.ParcelData.South), (int)MathF.Round(landJoin.ParcelData.East), - (int)MathF.Round(landJoin.ParcelData.North), this); + (int)MathF.Round(landJoin.ParcelData.North), c); } - private void HandleParcelPropertiesUpdate(Packet Pack) + private static void HandleParcelPropertiesUpdate(LLClientView c, Packet Pack) { - if (OnParcelPropertiesUpdateRequest is null) + if (c.OnParcelPropertiesUpdateRequest is null) return; ParcelPropertiesUpdatePacket parcelPropertiesPacket = (ParcelPropertiesUpdatePacket)Pack; - if (parcelPropertiesPacket.AgentData.SessionID.NotEqual(m_sessionId) || parcelPropertiesPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (parcelPropertiesPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || parcelPropertiesPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; LandUpdateArgs args = new() @@ -10908,16 +10929,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP UserLookAt = parcelPropertiesPacket.ParcelData.UserLookAt }; - OnParcelPropertiesUpdateRequest?.Invoke(args, parcelPropertiesPacket.ParcelData.LocalID, this); + c.OnParcelPropertiesUpdateRequest?.Invoke(args, parcelPropertiesPacket.ParcelData.LocalID, c); } - private void HandleParcelSelectObjects(Packet Pack) + private static void HandleParcelSelectObjects(LLClientView c, Packet Pack) { - if(OnParcelSelectObjects is null) + if(c.OnParcelSelectObjects is null) return; ParcelSelectObjectsPacket selectPacket = (ParcelSelectObjectsPacket)Pack; - if (selectPacket.AgentData.SessionID.NotEqual(m_sessionId) || selectPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (selectPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || selectPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<UUID> returnIDs = new(selectPacket.ReturnIDs.Length); @@ -10926,53 +10947,53 @@ namespace OpenSim.Region.ClientStack.LindenUDP returnIDs.Add(rb.ReturnID); } - OnParcelSelectObjects?.Invoke(selectPacket.ParcelData.LocalID, - Convert.ToInt32(selectPacket.ParcelData.ReturnType), returnIDs, this); + c.OnParcelSelectObjects?.Invoke(selectPacket.ParcelData.LocalID, + Convert.ToInt32(selectPacket.ParcelData.ReturnType), returnIDs, c); } - private void HandleParcelObjectOwnersRequest(Packet Pack) + private static void HandleParcelObjectOwnersRequest(LLClientView c, Packet Pack) { ParcelObjectOwnersRequestPacket reqPacket = (ParcelObjectOwnersRequestPacket)Pack; - if (reqPacket.AgentData.SessionID.NotEqual(m_sessionId) || reqPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (reqPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || reqPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelObjectOwnerRequest?.Invoke(reqPacket.ParcelData.LocalID, this); + c.OnParcelObjectOwnerRequest?.Invoke(reqPacket.ParcelData.LocalID, c); } - private void HandleParcelGodForceOwner(Packet Pack) + private static void HandleParcelGodForceOwner(LLClientView c, Packet Pack) { ParcelGodForceOwnerPacket godForceOwnerPacket = (ParcelGodForceOwnerPacket)Pack; - if (godForceOwnerPacket.AgentData.SessionID.NotEqual(m_sessionId) || godForceOwnerPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (godForceOwnerPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || godForceOwnerPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelGodForceOwner?.Invoke(godForceOwnerPacket.Data.LocalID, godForceOwnerPacket.Data.OwnerID, this); + c.OnParcelGodForceOwner?.Invoke(godForceOwnerPacket.Data.LocalID, godForceOwnerPacket.Data.OwnerID, c); } - private void HandleParcelRelease(Packet Pack) + private static void HandleParcelRelease(LLClientView c, Packet Pack) { ParcelReleasePacket releasePacket = (ParcelReleasePacket)Pack; - if (releasePacket.AgentData.SessionID.NotEqual(m_sessionId) || releasePacket.AgentData.AgentID.NotEqual(m_agentId)) + if (releasePacket.AgentData.SessionID.NotEqual(c.m_sessionId) || releasePacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelAbandonRequest?.Invoke(releasePacket.Data.LocalID, this); + c.OnParcelAbandonRequest?.Invoke(releasePacket.Data.LocalID, c); } - private void HandleParcelReclaim(Packet Pack) + private static void HandleParcelReclaim(LLClientView c, Packet Pack) { ParcelReclaimPacket reclaimPacket = (ParcelReclaimPacket)Pack; - if (reclaimPacket.AgentData.SessionID.NotEqual(m_sessionId) || reclaimPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (reclaimPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || reclaimPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelReclaim?.Invoke(reclaimPacket.Data.LocalID, this); + c.OnParcelReclaim?.Invoke(reclaimPacket.Data.LocalID, c); } - private void HandleParcelReturnObjects(Packet Pack) + private static void HandleParcelReturnObjects(LLClientView c, Packet Pack) { - if(OnParcelReturnObjectsRequest is null) + if(c.OnParcelReturnObjectsRequest is null) return; ParcelReturnObjectsPacket parcelReturnObjects = (ParcelReturnObjectsPacket)Pack; - if (parcelReturnObjects.AgentData.SessionID.NotEqual(m_sessionId) || parcelReturnObjects.AgentData.AgentID.NotEqual(m_agentId)) + if (parcelReturnObjects.AgentData.SessionID.NotEqual(c.m_sessionId) || parcelReturnObjects.AgentData.AgentID.NotEqual(c.m_agentId)) return; UUID[] puserselectedOwnerIDs = new UUID[parcelReturnObjects.OwnerIDs.Length]; @@ -10983,36 +11004,36 @@ namespace OpenSim.Region.ClientStack.LindenUDP for (int parceliterator = 0; parceliterator < parcelReturnObjects.TaskIDs.Length; parceliterator++) puserselectedTaskIDs[parceliterator] = parcelReturnObjects.TaskIDs[parceliterator].TaskID; - OnParcelReturnObjectsRequest?.Invoke(parcelReturnObjects.ParcelData.LocalID, parcelReturnObjects.ParcelData.ReturnType, puserselectedOwnerIDs, puserselectedTaskIDs, this); + c.OnParcelReturnObjectsRequest?.Invoke(parcelReturnObjects.ParcelData.LocalID, parcelReturnObjects.ParcelData.ReturnType, puserselectedOwnerIDs, puserselectedTaskIDs, c); } - private void HandleParcelSetOtherCleanTime(Packet Pack) + private static void HandleParcelSetOtherCleanTime(LLClientView c, Packet Pack) { ParcelSetOtherCleanTimePacket parcelSetOtherCleanTimePacket = (ParcelSetOtherCleanTimePacket)Pack; - if (parcelSetOtherCleanTimePacket.AgentData.SessionID.NotEqual(m_sessionId) || parcelSetOtherCleanTimePacket.AgentData.AgentID.NotEqual(m_agentId)) + if (parcelSetOtherCleanTimePacket.AgentData.SessionID.NotEqual(c.m_sessionId) || parcelSetOtherCleanTimePacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelSetOtherCleanTime?.Invoke(this, + c.OnParcelSetOtherCleanTime?.Invoke(c, parcelSetOtherCleanTimePacket.ParcelData.LocalID, parcelSetOtherCleanTimePacket.ParcelData.OtherCleanTime); } - private void HandleLandStatRequest(Packet Pack) + private static void HandleLandStatRequest(LLClientView c, Packet Pack) { LandStatRequestPacket lsrp = (LandStatRequestPacket)Pack; - if (lsrp.AgentData.SessionID.NotEqual(m_sessionId) || lsrp.AgentData.AgentID.NotEqual(m_agentId)) + if (lsrp.AgentData.SessionID.NotEqual(c.m_sessionId) || lsrp.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnLandStatRequest?.Invoke(lsrp.RequestData.ParcelLocalID, lsrp.RequestData.ReportType, lsrp.RequestData.RequestFlags, Utils.BytesToString(lsrp.RequestData.Filter), this); + c.OnLandStatRequest?.Invoke(lsrp.RequestData.ParcelLocalID, lsrp.RequestData.ReportType, lsrp.RequestData.RequestFlags, Utils.BytesToString(lsrp.RequestData.Filter), c); } - private void HandleParcelDwellRequest(Packet Pack) + private static void HandleParcelDwellRequest(LLClientView c, Packet Pack) { ParcelDwellRequestPacket dwellrq = (ParcelDwellRequestPacket)Pack; - if (dwellrq.AgentData.SessionID.NotEqual(m_sessionId) || dwellrq.AgentData.AgentID.NotEqual(m_agentId)) + if (dwellrq.AgentData.SessionID.NotEqual(c.m_sessionId) || dwellrq.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelDwellRequest?.Invoke(dwellrq.Data.LocalID, this); + c.OnParcelDwellRequest?.Invoke(dwellrq.Data.LocalID, c); } #endregion Parcel related packets @@ -11020,25 +11041,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP #region Estate Packets private static double m_lastMapRegenTime = Double.MinValue; - private void HandleEstateOwnerMessage(Packet Pack) + private static void HandleEstateOwnerMessage(LLClientView c, Packet Pack) { EstateOwnerMessagePacket messagePacket = (EstateOwnerMessagePacket)Pack; - if (messagePacket.AgentData.SessionID.NotEqual(m_sessionId) || messagePacket.AgentData.AgentID.NotEqual(m_agentId)) + if (messagePacket.AgentData.SessionID.NotEqual(c.m_sessionId) || messagePacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; string method = Utils.BytesToString(messagePacket.MethodData.Method); switch (method) { case "getinfo": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { - OnDetailedEstateDataRequest?.Invoke(this, messagePacket.MethodData.Invoice); + c.OnDetailedEstateDataRequest?.Invoke(c, messagePacket.MethodData.Invoice); } return; case "setregioninfo": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { - OnSetEstateFlagsRequest?.Invoke(convertParamStringToBool(messagePacket.ParamList[0].Parameter), convertParamStringToBool(messagePacket.ParamList[1].Parameter), + c.OnSetEstateFlagsRequest?.Invoke(convertParamStringToBool(messagePacket.ParamList[0].Parameter), convertParamStringToBool(messagePacket.ParamList[1].Parameter), convertParamStringToBool(messagePacket.ParamList[2].Parameter), !convertParamStringToBool(messagePacket.ParamList[3].Parameter), Convert.ToInt16(Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[4].Parameter), Culture.NumberFormatInfo)), (float)Convert.ToDecimal(Utils.BytesToString(messagePacket.ParamList[5].Parameter), Culture.NumberFormatInfo), @@ -11062,7 +11083,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP // } // break; case "texturedetail": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { @@ -11073,14 +11094,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP Int16 corner = Convert.ToInt16(splitField[0]); UUID textureUUID = new(splitField[1]); - OnSetEstateTerrainDetailTexture?.Invoke(this, corner, textureUUID); + c.OnSetEstateTerrainDetailTexture?.Invoke(c, corner, textureUUID); } } } return; case "textureheights": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { @@ -11092,16 +11113,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP float lowValue = Convert.ToSingle(splitField[1], Culture.NumberFormatInfo); float highValue = Convert.ToSingle(splitField[2], Culture.NumberFormatInfo); - OnSetEstateTerrainTextureHeights?.Invoke(this, corner, lowValue, highValue); + c.OnSetEstateTerrainTextureHeights?.Invoke(c, corner, lowValue, highValue); } } } return; case "texturecommit": - OnCommitEstateTerrainTextureRequest?.Invoke(this); + c.OnCommitEstateTerrainTextureRequest?.Invoke(c); return; case "setregionterrain": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { if (messagePacket.ParamList.Length != 9) { @@ -11121,7 +11142,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP bool EstateFixedSun = convertParamStringToBool(messagePacket.ParamList[7].Parameter); float EstateSunHour = Convert.ToSingle(Utils.BytesToString(messagePacket.ParamList[8].Parameter), Culture.NumberFormatInfo); - OnSetRegionTerrainSettings?.Invoke(WaterHeight, TerrainRaiseLimit, TerrainLowerLimit, UseEstateSun, UseFixedSun, SunHour, UseGlobal, EstateFixedSun, EstateSunHour); + c.OnSetRegionTerrainSettings?.Invoke(WaterHeight, TerrainRaiseLimit, TerrainLowerLimit, UseEstateSun, UseFixedSun, SunHour, UseGlobal, EstateFixedSun, EstateSunHour); } catch (Exception ex) { @@ -11132,47 +11153,47 @@ namespace OpenSim.Region.ClientStack.LindenUDP return; case "restart": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { // There's only 1 block in the estateResetSim.. and that's the number of seconds till restart. foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { if(Utils.TryParseSingle(Utils.BytesToString(block.Parameter), out float timeSeconds)) - OnEstateRestartSimRequest?.Invoke(this, (int)timeSeconds); + c.OnEstateRestartSimRequest?.Invoke(c, (int)timeSeconds); } } return; case "estatechangecovenantid": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { foreach (EstateOwnerMessagePacket.ParamListBlock block in messagePacket.ParamList) { UUID newCovenantID = new(Utils.BytesToString(block.Parameter)); - OnEstateChangeCovenantRequest?.Invoke(this, newCovenantID); + c.OnEstateChangeCovenantRequest?.Invoke(c, newCovenantID); } } return; case "estateaccessdelta": // Estate access delta manages the banlist and allow list too. - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { int estateAccessType = Convert.ToInt16(Utils.BytesToString(messagePacket.ParamList[1].Parameter)); - OnUpdateEstateAccessDeltaRequest?.Invoke(this, messagePacket.MethodData.Invoice, estateAccessType, new UUID(Utils.BytesToString(messagePacket.ParamList[2].Parameter))); + c.OnUpdateEstateAccessDeltaRequest?.Invoke(c, messagePacket.MethodData.Invoice, estateAccessType, new UUID(Utils.BytesToString(messagePacket.ParamList[2].Parameter))); } return; case "simulatormessage": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { UUID SenderID = new(Utils.BytesToString(messagePacket.ParamList[2].Parameter)); string SenderName = Utils.BytesToString(messagePacket.ParamList[3].Parameter); string Message = Utils.BytesToString(messagePacket.ParamList[4].Parameter); - OnSimulatorBlueBoxMessageRequest?.Invoke(this, messagePacket.MethodData.Invoice, + c.OnSimulatorBlueBoxMessageRequest?.Invoke(c, messagePacket.MethodData.Invoice, SenderID, messagePacket.AgentData.SessionID, SenderName, Message); } return; case "instantmessage": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { if (messagePacket.ParamList.Length < 2) return; @@ -11183,7 +11204,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (messagePacket.ParamList.Length < 5) { - SenderID = m_agentId; + SenderID = c.m_agentId; SenderName = Utils.BytesToString(messagePacket.ParamList[0].Parameter); Message = Utils.BytesToString(messagePacket.ParamList[1].Parameter); } @@ -11194,45 +11215,45 @@ namespace OpenSim.Region.ClientStack.LindenUDP Message = Utils.BytesToString(messagePacket.ParamList[4].Parameter); } - OnEstateBlueBoxMessageRequest?.Invoke(this, messagePacket.MethodData.Invoice, - SenderID, m_sessionId, SenderName, Message); + c.OnEstateBlueBoxMessageRequest?.Invoke(c, messagePacket.MethodData.Invoice, + SenderID, c.m_sessionId, SenderName, Message); } return; case "setregiondebug": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { - if(OnEstateDebugRegionRequest is not null) + if(c.OnEstateDebugRegionRequest is not null) { bool scripted = convertParamStringToBool(messagePacket.ParamList[0].Parameter); bool collisionEvents = convertParamStringToBool(messagePacket.ParamList[1].Parameter); bool physics = convertParamStringToBool(messagePacket.ParamList[2].Parameter); - OnEstateDebugRegionRequest?.Invoke(this, messagePacket.MethodData.Invoice, - m_agentId, scripted, collisionEvents, physics); + c.OnEstateDebugRegionRequest?.Invoke(c, messagePacket.MethodData.Invoice, + c.m_agentId, scripted, collisionEvents, physics); } } return; case "teleporthomeuser": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { if(UUID.TryParse(Utils.BytesToString(messagePacket.ParamList[1].Parameter), out UUID Prey)) - OnEstateTeleportOneUserHomeRequest?.Invoke(this, messagePacket.MethodData.Invoice, m_agentId, Prey, false); + c.OnEstateTeleportOneUserHomeRequest?.Invoke(c, messagePacket.MethodData.Invoice, c.m_agentId, Prey, false); } return; case "teleporthomeallusers": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { - OnEstateTeleportAllUsersHomeRequest?.Invoke(this, messagePacket.MethodData.Invoice, m_agentId); + c.OnEstateTeleportAllUsersHomeRequest?.Invoke(c, messagePacket.MethodData.Invoice, c.m_agentId); } return; case "colliders": - OnLandStatRequest?.Invoke(0, 1, 0, "", this); + c.OnLandStatRequest?.Invoke(0, 1, 0, "", c); return; case "scripts": - OnLandStatRequest?.Invoke(0, 0, 0, "", this); + c.OnLandStatRequest?.Invoke(0, 0, 0, "", c); return; case "terrain": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { if (messagePacket.ParamList.Length > 0) { @@ -11240,17 +11261,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP switch(p0) { case "bake": - OnBakeTerrain?.Invoke(this); + c.OnBakeTerrain?.Invoke(c); break; case "download filename": if (messagePacket.ParamList.Length > 1) - OnRequestTerrain?.Invoke(this, Utils.BytesToString(messagePacket.ParamList[1].Parameter)); + c.OnRequestTerrain?.Invoke(c, Utils.BytesToString(messagePacket.ParamList[1].Parameter)); break; case "upload filename": if (messagePacket.ParamList.Length > 1) - OnUploadTerrain?.Invoke(this, Utils.BytesToString(messagePacket.ParamList[1].Parameter)); + c.OnUploadTerrain?.Invoke(c, Utils.BytesToString(messagePacket.ParamList[1].Parameter)); break; default: @@ -11261,16 +11282,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP return; case "estatechangeinfo": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { UInt32 param1 = Convert.ToUInt32(Utils.BytesToString(messagePacket.ParamList[1].Parameter)); UInt32 param2 = Convert.ToUInt32(Utils.BytesToString(messagePacket.ParamList[2].Parameter)); - OnEstateChangeInfo?.Invoke(this, messagePacket.MethodData.Invoice, m_agentId, param1, param2); + c.OnEstateChangeInfo?.Invoke(c, messagePacket.MethodData.Invoice, c.m_agentId, param1, param2); } return; case "telehub": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { UInt32 param1 = 0u; string command = Utils.BytesToString(messagePacket.ParamList[0].Parameter); @@ -11282,53 +11303,53 @@ namespace OpenSim.Region.ClientStack.LindenUDP } catch {} } - OnEstateManageTelehub?.Invoke(this, messagePacket.MethodData.Invoice, messagePacket.AgentData.AgentID, command, param1); + c.OnEstateManageTelehub?.Invoke(c, messagePacket.MethodData.Invoice, messagePacket.AgentData.AgentID, command, param1); } return; case "refreshmapvisibility": - if (m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if (c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { - IWorldMapModule mapModule = Scene.RequestModuleInterface<IWorldMapModule>(); + IWorldMapModule mapModule = c.m_scene.RequestModuleInterface<IWorldMapModule>(); if (mapModule is null) { - SendAlertMessage("Terrain map generator not avaiable"); + c.SendAlertMessage("Terrain map generator not avaiable"); return; } if (m_lastMapRegenTime == Double.MaxValue) { - SendAlertMessage("Terrain map generation still in progress"); + c.SendAlertMessage("Terrain map generation still in progress"); return; } double now = Util.GetTimeStamp(); if (now - m_lastMapRegenTime < 120) // 2 minutes global cool down { - SendAlertMessage("Please wait at least 2 minutes between map generation commands"); + c.SendAlertMessage("Please wait at least 2 minutes between map generation commands"); return; } m_lastMapRegenTime = Double.MaxValue; - m_scene.RegenerateMaptileAndReregister(this, null); - SendAlertMessage("Terrain map generated"); + c.m_scene.RegenerateMaptileAndReregister(c, null); + c.SendAlertMessage("Terrain map generated"); m_lastMapRegenTime = now; } return; case "kickestate": - if(m_scene.Permissions.CanIssueEstateCommand(m_agentId, false)) + if(c.m_scene.Permissions.CanIssueEstateCommand(c.m_agentId, false)) { if(UUID.TryParse(Utils.BytesToString(messagePacket.ParamList[0].Parameter), out UUID Prey)) - OnEstateTeleportOneUserHomeRequest?.Invoke(this, messagePacket.MethodData.Invoice, - m_agentId, Prey, true); + c.OnEstateTeleportOneUserHomeRequest?.Invoke(c, messagePacket.MethodData.Invoice, + c.m_agentId, Prey, true); } return; default: m_log.WarnFormat( "[LLCLIENTVIEW]: EstateOwnerMessage: Unknown method {0} requested for {1} in {2}", - method, Name, Scene.Name); + method, c.Name, c.m_scene.Name); for (int i = 0; i < messagePacket.ParamList.Length; i++) { @@ -11348,47 +11369,47 @@ namespace OpenSim.Region.ClientStack.LindenUDP //lsrp.RequestData.Filter; } - private void HandleRequestRegionInfo(Packet Pack) + private static void HandleRequestRegionInfo(LLClientView c, Packet Pack) { RequestRegionInfoPacket.AgentDataBlock mPacket = ((RequestRegionInfoPacket)Pack).AgentData; - if (mPacket.SessionID.NotEqual(m_sessionId) || mPacket.AgentID.NotEqual(m_agentId)) + if (mPacket.SessionID.NotEqual(c.m_sessionId) || mPacket.AgentID.NotEqual(c.m_agentId)) return; - OnRegionInfoRequest?.Invoke(this); + c.OnRegionInfoRequest?.Invoke(c); } - private void HandleEstateCovenantRequest(Packet Pack) + private static void HandleEstateCovenantRequest(LLClientView c, Packet Pack) { EstateCovenantRequestPacket.AgentDataBlock epack = ((EstateCovenantRequestPacket)Pack).AgentData; - if (epack.SessionID.NotEqual(m_sessionId) || epack.AgentID.NotEqual(m_agentId)) + if (epack.SessionID.NotEqual(c.m_sessionId) || epack.AgentID.NotEqual(c.m_agentId)) return; - OnEstateCovenantRequest?.Invoke(this); + c.OnEstateCovenantRequest?.Invoke(c); } #endregion Estate Packets #region GodPackets - private void HandleRequestGodlikePowers(Packet Pack) + private static void HandleRequestGodlikePowers(LLClientView c, Packet Pack) { RequestGodlikePowersPacket rglpPack = (RequestGodlikePowersPacket)Pack; RequestGodlikePowersPacket.AgentDataBlock ablock = rglpPack.AgentData; - if (ablock.SessionID.NotEqual(m_sessionId) || ablock.AgentID.NotEqual(m_agentId)) + if (ablock.SessionID.NotEqual(c.m_sessionId) || ablock.AgentID.NotEqual(c.m_agentId)) return; RequestGodlikePowersPacket.RequestBlockBlock rblock = rglpPack.RequestBlock; UUID token = rblock.Token; - OnRequestGodlikePowers?.Invoke(ablock.AgentID, ablock.SessionID, token, rblock.Godlike); + c.OnRequestGodlikePowers?.Invoke(ablock.AgentID, ablock.SessionID, token, rblock.Godlike); } - private void HandleGodUpdateRegionInfoUpdate(Packet packet) + private static void HandleGodUpdateRegionInfoUpdate(LLClientView c, Packet packet) { GodUpdateRegionInfoPacket GodUpdateRegionInfo = (GodUpdateRegionInfoPacket)packet; - if (GodUpdateRegionInfo.AgentData.SessionID.NotEqual(m_sessionId) || GodUpdateRegionInfo.AgentData.AgentID.NotEqual(m_agentId)) + if (GodUpdateRegionInfo.AgentData.SessionID.NotEqual(c.m_sessionId) || GodUpdateRegionInfo.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnGodUpdateRegionInfoUpdate?.Invoke(this, + c.OnGodUpdateRegionInfoUpdate?.Invoke(c, GodUpdateRegionInfo.RegionInfo.BillableFactor, GodUpdateRegionInfo.RegionInfo.EstateID, GodUpdateRegionInfo.RegionInfo.RegionFlags, @@ -11397,102 +11418,103 @@ namespace OpenSim.Region.ClientStack.LindenUDP GodUpdateRegionInfo.RegionInfo.RedirectGridY); } - private void HandleSimWideDeletes(Packet packet) + private static void HandleSimWideDeletes(LLClientView c, Packet packet) { SimWideDeletesPacket SimWideDeletesRequest = (SimWideDeletesPacket)packet; - if(SimWideDeletesRequest.AgentData.AgentID.NotEqual(m_agentId) || SimWideDeletesRequest.AgentData.SessionID.NotEqual(m_sessionId)) + if(SimWideDeletesRequest.AgentData.AgentID.NotEqual(c.m_agentId) || SimWideDeletesRequest.AgentData.SessionID.NotEqual(c.m_sessionId)) return; - OnSimWideDeletes?.Invoke(this, SimWideDeletesRequest.AgentData.AgentID,(int)SimWideDeletesRequest.DataBlock.Flags,SimWideDeletesRequest.DataBlock.TargetID); + c.OnSimWideDeletes?.Invoke(c, SimWideDeletesRequest.AgentData.AgentID,(int)SimWideDeletesRequest.DataBlock.Flags, + SimWideDeletesRequest.DataBlock.TargetID); } - private void HandleGodlikeMessage(Packet packet) + private static void HandleGodlikeMessage(LLClientView c, Packet packet) { GodlikeMessagePacket GodlikeMessage = (GodlikeMessagePacket)packet; - if (GodlikeMessage.AgentData.SessionID.NotEqual(m_sessionId) || GodlikeMessage.AgentData.AgentID.NotEqual(m_agentId)) + if (GodlikeMessage.AgentData.SessionID.NotEqual(c.m_sessionId) || GodlikeMessage.AgentData.AgentID.NotEqual(c.m_agentId)) return; - onGodlikeMessage?.Invoke(this, + c.onGodlikeMessage?.Invoke(c, GodlikeMessage.MethodData.Invoice, GodlikeMessage.MethodData.Method, GodlikeMessage.ParamList[0].Parameter); } - private void HandleSaveStatePacket(Packet packet) + private static void HandleSaveStatePacket(LLClientView c, Packet packet) { StateSavePacket SaveStateMessage = (StateSavePacket)packet; - if (SaveStateMessage.AgentData.SessionID.NotEqual(m_sessionId) || SaveStateMessage.AgentData.AgentID.NotEqual(m_agentId)) + if (SaveStateMessage.AgentData.SessionID.NotEqual(c.m_sessionId) || SaveStateMessage.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnSaveState?.Invoke(this,SaveStateMessage.AgentData.AgentID); + c.OnSaveState?.Invoke(c, SaveStateMessage.AgentData.AgentID); } - private void HandleGodKickUser(Packet Pack) + private static void HandleGodKickUser(LLClientView c, Packet Pack) { GodKickUserPacket gkupack = (GodKickUserPacket)Pack; - if (gkupack.UserInfo.GodSessionID.NotEqual(m_sessionId) || gkupack.UserInfo.GodID.NotEqual(m_agentId)) + if (gkupack.UserInfo.GodSessionID.NotEqual(c.m_sessionId) || gkupack.UserInfo.GodID.NotEqual(c.m_agentId)) return; - OnGodKickUser?.Invoke(gkupack.UserInfo.GodID, gkupack.UserInfo.AgentID, gkupack.UserInfo.KickFlags, gkupack.UserInfo.Reason); + c.OnGodKickUser?.Invoke(gkupack.UserInfo.GodID, gkupack.UserInfo.AgentID, gkupack.UserInfo.KickFlags, gkupack.UserInfo.Reason); } #endregion GodPackets #region Economy/Transaction Packets - private void HandleMoneyBalanceRequest(Packet Pack) + private static void HandleMoneyBalanceRequest(LLClientView c, Packet Pack) { MoneyBalanceRequestPacket moneybalancerequestpacket = (MoneyBalanceRequestPacket)Pack; - if (moneybalancerequestpacket.AgentData.SessionID.NotEqual(m_sessionId) || moneybalancerequestpacket.AgentData.AgentID.NotEqual(m_agentId)) + if (moneybalancerequestpacket.AgentData.SessionID.NotEqual(c.m_sessionId) || moneybalancerequestpacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnMoneyBalanceRequest?.Invoke(this, moneybalancerequestpacket.AgentData.AgentID, moneybalancerequestpacket.AgentData.SessionID, moneybalancerequestpacket.MoneyData.TransactionID); + c.OnMoneyBalanceRequest?.Invoke(c, moneybalancerequestpacket.AgentData.AgentID, moneybalancerequestpacket.AgentData.SessionID, moneybalancerequestpacket.MoneyData.TransactionID); } - private void HandleEconomyDataRequest(Packet Pack) + private static void HandleEconomyDataRequest(LLClientView c, Packet _) { - OnEconomyDataRequest?.Invoke(this); + c.OnEconomyDataRequest?.Invoke(c); } - private void HandleRequestPayPrice(Packet Pack) + private static void HandleRequestPayPrice(LLClientView c, Packet Pack) { RequestPayPricePacket requestPayPricePacket = (RequestPayPricePacket)Pack; - OnRequestPayPrice?.Invoke(this, requestPayPricePacket.ObjectData.ObjectID); + c.OnRequestPayPrice?.Invoke(c, requestPayPricePacket.ObjectData.ObjectID); } - private void HandleObjectSaleInfo(Packet Pack) + private static void HandleObjectSaleInfo(LLClientView c, Packet Pack) { - if(OnObjectSaleInfo is null) + if(c.OnObjectSaleInfo is null) return; ObjectSaleInfoPacket objectSaleInfoPacket = (ObjectSaleInfoPacket)Pack; - if (objectSaleInfoPacket.AgentData.SessionID.NotEqual(m_sessionId) || objectSaleInfoPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (objectSaleInfoPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || objectSaleInfoPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (ObjectSaleInfoPacket.ObjectDataBlock d in objectSaleInfoPacket.ObjectData) { - OnObjectSaleInfo?.Invoke(this, - m_agentId, - SessionId, + c.OnObjectSaleInfo?.Invoke(c, + c.m_agentId, + c.SessionId, d.LocalID, d.SaleType, d.SalePrice); } } - private void HandleObjectBuy(Packet Pack) + private static void HandleObjectBuy(LLClientView c, Packet Pack) { - if(OnObjectBuy is null) + if(c.OnObjectBuy is null) return; ObjectBuyPacket objectBuyPacket = (ObjectBuyPacket)Pack; - if (objectBuyPacket.AgentData.SessionID.NotEqual(m_sessionId) || objectBuyPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (objectBuyPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || objectBuyPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (ObjectBuyPacket.ObjectDataBlock d in objectBuyPacket.ObjectData) { - OnObjectBuy?.Invoke(this, + c.OnObjectBuy?.Invoke(c, objectBuyPacket.AgentData.AgentID, objectBuyPacket.AgentData.SessionID, objectBuyPacket.AgentData.GroupID, @@ -11506,122 +11528,122 @@ namespace OpenSim.Region.ClientStack.LindenUDP #endregion Economy/Transaction Packets #region Script Packets - private void HandleGetScriptRunning(Packet Pack) + private static void HandleGetScriptRunning(LLClientView c, Packet Pack) { GetScriptRunningPacket scriptRunning = (GetScriptRunningPacket)Pack; - OnGetScriptRunning?.Invoke(this, scriptRunning.Script.ObjectID, scriptRunning.Script.ItemID); + c.OnGetScriptRunning?.Invoke(c, scriptRunning.Script.ObjectID, scriptRunning.Script.ItemID); } - private void HandleSetScriptRunning(Packet Pack) + private static void HandleSetScriptRunning(LLClientView c, Packet Pack) { SetScriptRunningPacket setScriptRunning = (SetScriptRunningPacket)Pack; - if (setScriptRunning.AgentData.SessionID.NotEqual(m_sessionId) || setScriptRunning.AgentData.AgentID.NotEqual(m_agentId)) + if (setScriptRunning.AgentData.SessionID.NotEqual(c.m_sessionId) || setScriptRunning.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnSetScriptRunning?.Invoke(this, setScriptRunning.Script.ObjectID, setScriptRunning.Script.ItemID, setScriptRunning.Script.Running); + c.OnSetScriptRunning?.Invoke(c, setScriptRunning.Script.ObjectID, setScriptRunning.Script.ItemID, setScriptRunning.Script.Running); } - private void HandleScriptReset(Packet Pack) + private static void HandleScriptReset(LLClientView c, Packet Pack) { ScriptResetPacket scriptResetPacket = (ScriptResetPacket)Pack; - if (scriptResetPacket.AgentData.SessionID.NotEqual(m_sessionId) || scriptResetPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (scriptResetPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || scriptResetPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnScriptReset?.Invoke(this, scriptResetPacket.Script.ObjectID, scriptResetPacket.Script.ItemID); + c.OnScriptReset?.Invoke(c, scriptResetPacket.Script.ObjectID, scriptResetPacket.Script.ItemID); } #endregion Script Packets #region Gesture Managment - private void HandleActivateGestures(Packet Pack) + private static void HandleActivateGestures(LLClientView c, Packet Pack) { - if(OnActivateGesture is null) + if(c.OnActivateGesture is null) return; ActivateGesturesPacket activateGesturePacket = (ActivateGesturesPacket)Pack; - if (activateGesturePacket.AgentData.SessionID.NotEqual(m_sessionId) || activateGesturePacket.AgentData.AgentID.NotEqual(m_agentId)) + if (activateGesturePacket.AgentData.SessionID.NotEqual(c.m_sessionId) || activateGesturePacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; ActivateGesturesPacket.DataBlock[] data = activateGesturePacket.Data; for (int i= 0; i < data.Length; ++i) { - OnActivateGesture?.Invoke(this, + c.OnActivateGesture?.Invoke(c, data[i].AssetID, data[i].ItemID); } } - private void HandleDeactivateGestures(Packet Pack) + private static void HandleDeactivateGestures(LLClientView c, Packet Pack) { - if(OnDeactivateGesture is null) + if(c.OnDeactivateGesture is null) return; DeactivateGesturesPacket deactivateGesturePacket = (DeactivateGesturesPacket)Pack; - if (deactivateGesturePacket.AgentData.SessionID.NotEqual(m_sessionId) || deactivateGesturePacket.AgentData.AgentID.NotEqual(m_agentId)) + if (deactivateGesturePacket.AgentData.SessionID.NotEqual(c.m_sessionId) || deactivateGesturePacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; DeactivateGesturesPacket.DataBlock[] data = deactivateGesturePacket.Data; for (int i = 0; i < data.Length; ++i) { - OnDeactivateGesture?.Invoke(this, data[i].ItemID); + c.OnDeactivateGesture?.Invoke(c, data[i].ItemID); } } #endregion Gesture Managment - private void HandleObjectOwner(Packet Pack) + private static void HandleObjectOwner(LLClientView c, Packet Pack) { - if (OnObjectOwner is null) + if (c.OnObjectOwner is null) return; ObjectOwnerPacket objectOwnerPacket = (ObjectOwnerPacket)Pack; - if (objectOwnerPacket.AgentData.SessionID.NotEqual(m_sessionId) || objectOwnerPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (objectOwnerPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || objectOwnerPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<uint> localIDs = new(); foreach (ObjectOwnerPacket.ObjectDataBlock d in objectOwnerPacket.ObjectData) localIDs.Add(d.ObjectLocalID); - OnObjectOwner?.Invoke(this, objectOwnerPacket.HeaderData.OwnerID, objectOwnerPacket.HeaderData.GroupID, localIDs); + c.OnObjectOwner?.Invoke(c, objectOwnerPacket.HeaderData.OwnerID, objectOwnerPacket.HeaderData.GroupID, localIDs); } - private void HandleAgentFOV(Packet Pack) + private static void HandleAgentFOV(LLClientView c, Packet Pack) { AgentFOVPacket fovPacket = (AgentFOVPacket)Pack; - if(fovPacket.AgentData.AgentID.NotEqual(m_agentId) || fovPacket.AgentData.SessionID.NotEqual(m_sessionId)) + if(fovPacket.AgentData.AgentID.NotEqual(c.m_agentId) || fovPacket.AgentData.SessionID.NotEqual(c.m_sessionId)) return; uint genCounter = fovPacket.FOVBlock.GenCounter; - if (genCounter == 0 || genCounter > m_agentFOVCounter) + if (genCounter == 0 || genCounter > c.m_agentFOVCounter) { - m_agentFOVCounter = genCounter; - FOV = fovPacket.FOVBlock.VerticalAngle; - OnAgentFOV?.Invoke(this, FOV); + c.m_agentFOVCounter = genCounter; + c.FOV = fovPacket.FOVBlock.VerticalAngle; + c.OnAgentFOV?.Invoke(c, c.FOV); } } #region unimplemented handlers - private void HandleViewerStats(Packet Pack) + private static void HandleViewerStats(LLClientView c, Packet Pack) { // TODO: handle this packet //m_log.Warn("[CLIENT]: unhandled ViewerStats packet"); } - private void HandleMapItemRequest(Packet Pack) + private static void HandleMapItemRequest(LLClientView c, Packet Pack) { MapItemRequestPacket mirpk = (MapItemRequestPacket)Pack; - if (mirpk.AgentData.SessionID.NotEqual(m_sessionId) || mirpk.AgentData.AgentID.NotEqual(m_agentId)) + if (mirpk.AgentData.SessionID.NotEqual(c.m_sessionId) || mirpk.AgentData.AgentID.NotEqual(c.m_agentId)) return; //m_log.Debug(mirpk.ToString()); try { - OnMapItemRequest?.Invoke(this, mirpk.AgentData.Flags, mirpk.AgentData.EstateID, + c.OnMapItemRequest?.Invoke(c, mirpk.AgentData.Flags, mirpk.AgentData.EstateID, mirpk.AgentData.Godlike, mirpk.RequestData.ItemType, mirpk.RequestData.RegionHandle); } @@ -11631,59 +11653,59 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - private void HandleTransferAbort(Packet Pack) + private static void HandleTransferAbort(LLClientView c, Packet Pack) { } - private void HandleMuteListRequest(Packet Pack) + private static void HandleMuteListRequest(LLClientView c, Packet Pack) { MuteListRequestPacket muteListRequest = (MuteListRequestPacket)Pack; - if (muteListRequest.AgentData.SessionID.NotEqual(m_sessionId) || muteListRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (muteListRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || muteListRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - if (OnMuteListRequest != null) + if (c.OnMuteListRequest != null) { - OnMuteListRequest?.Invoke(this, muteListRequest.MuteData.MuteCRC); + c.OnMuteListRequest?.Invoke(c, muteListRequest.MuteData.MuteCRC); } else { if(muteListRequest.MuteData.MuteCRC == 0) - SendEmpytMuteList(); + c.SendEmpytMuteList(); else - SendUseCachedMuteList(); + c.SendUseCachedMuteList(); } } - private void HandleUpdateMuteListEntry(Packet packet) + private static void HandleUpdateMuteListEntry(LLClientView c, Packet packet) { UpdateMuteListEntryPacket UpdateMuteListEntry = (UpdateMuteListEntryPacket)packet; - if (UpdateMuteListEntry.AgentData.SessionID.NotEqual(m_sessionId) || UpdateMuteListEntry.AgentData.AgentID.NotEqual(m_agentId)) + if (UpdateMuteListEntry.AgentData.SessionID.NotEqual(c.m_sessionId) || UpdateMuteListEntry.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnUpdateMuteListEntry?.Invoke(this, UpdateMuteListEntry.MuteData.MuteID, + c.OnUpdateMuteListEntry?.Invoke(c, UpdateMuteListEntry.MuteData.MuteID, Utils.BytesToString(UpdateMuteListEntry.MuteData.MuteName), UpdateMuteListEntry.MuteData.MuteType, UpdateMuteListEntry.MuteData.MuteFlags); } - private void HandleRemoveMuteListEntry(Packet packet) + private static void HandleRemoveMuteListEntry(LLClientView c, Packet packet) { RemoveMuteListEntryPacket RemoveMuteListEntry = (RemoveMuteListEntryPacket)packet; - if (RemoveMuteListEntry.AgentData.SessionID.NotEqual(m_sessionId) || RemoveMuteListEntry.AgentData.AgentID.NotEqual(m_agentId)) + if (RemoveMuteListEntry.AgentData.SessionID.NotEqual(c.m_sessionId) || RemoveMuteListEntry.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnRemoveMuteListEntry?.Invoke(this, + c.OnRemoveMuteListEntry?.Invoke(c, RemoveMuteListEntry.MuteData.MuteID, Utils.BytesToString(RemoveMuteListEntry.MuteData.MuteName)); } - private void HandleUserReport(Packet packet) + private static void HandleUserReport(LLClientView c, Packet packet) { UserReportPacket UserReport = (UserReportPacket)packet; - if (UserReport.AgentData.SessionID.NotEqual(m_sessionId) || UserReport.AgentData.AgentID.NotEqual(m_agentId)) + if (UserReport.AgentData.SessionID.NotEqual(c.m_sessionId) || UserReport.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnUserReport?.Invoke(this, + c.OnUserReport?.Invoke(c, Utils.BytesToString(UserReport.ReportData.AbuseRegionName), UserReport.ReportData.AbuserID, UserReport.ReportData.Category, @@ -11697,27 +11719,27 @@ namespace OpenSim.Region.ClientStack.LindenUDP UserReport.AgentData.AgentID); } - private void HandleSendPostcard(Packet packet) + private static void HandleSendPostcard(LLClientView c, Packet packet) { // SendPostcardPacket SendPostcard = // (SendPostcardPacket)packet; - OnSendPostcard?.Invoke(this); + c.OnSendPostcard?.Invoke(c); } - private void HandleChangeInventoryItemFlags(Packet packet) + private static void HandleChangeInventoryItemFlags(LLClientView c, Packet packet) { - if(OnChangeInventoryItemFlags is null) + if(c.OnChangeInventoryItemFlags is null) return; ChangeInventoryItemFlagsPacket ChangeInventoryItemFlags = (ChangeInventoryItemFlagsPacket)packet; - if (ChangeInventoryItemFlags.AgentData.SessionID.NotEqual(m_sessionId) || ChangeInventoryItemFlags.AgentData.AgentID.NotEqual(m_agentId)) + if (ChangeInventoryItemFlags.AgentData.SessionID.NotEqual(c.m_sessionId) || ChangeInventoryItemFlags.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach(ChangeInventoryItemFlagsPacket.InventoryDataBlock b in ChangeInventoryItemFlags.InventoryData) - OnChangeInventoryItemFlags?.Invoke(this, b.ItemID, b.Flags); + c.OnChangeInventoryItemFlags?.Invoke(c, b.ItemID, b.Flags); } - private void HandleUseCircuitCode(Packet Pack) + private static void HandleUseCircuitCode(LLClientView c, Packet Pack) { /* UseCircuitCodePacket uccp = (UseCircuitCodePacket)Pack; @@ -11731,13 +11753,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP */ } - private void HandleCreateNewOutfitAttachments(Packet Pack) + private static void HandleCreateNewOutfitAttachments(LLClientView c, Packet Pack) { - if(OnMoveItemsAndLeaveCopy is null) + if(c.OnMoveItemsAndLeaveCopy is null) return; CreateNewOutfitAttachmentsPacket packet = (CreateNewOutfitAttachmentsPacket)Pack; - if (packet.AgentData.SessionID.NotEqual(m_sessionId) || packet.AgentData.AgentID.NotEqual(m_agentId)) + if (packet.AgentData.SessionID.NotEqual(c.m_sessionId) || packet.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<InventoryItemBase> items = new(); @@ -11751,21 +11773,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP items.Add(b); } - OnMoveItemsAndLeaveCopy?.Invoke(this, items, packet.HeaderData.NewFolderID); + c.OnMoveItemsAndLeaveCopy?.Invoke(c, items, packet.HeaderData.NewFolderID); } - private void HandleAgentHeightWidth(Packet Pack) + private static void HandleAgentHeightWidth(LLClientView c, Packet Pack) { AgentHeightWidthPacket hwPacket = (AgentHeightWidthPacket)Pack; - if (hwPacket.AgentData.AgentID.NotEqual(m_agentId) || hwPacket.AgentData.SessionID.NotEqual(m_sessionId)) + if (hwPacket.AgentData.AgentID.NotEqual(c.m_agentId) || hwPacket.AgentData.SessionID.NotEqual(c.m_sessionId)) return; - viewHeight = hwPacket.HeightWidthBlock.Height; - viewWidth = hwPacket.HeightWidthBlock.Width; + c.viewHeight = hwPacket.HeightWidthBlock.Height; + c.viewWidth = hwPacket.HeightWidthBlock.Width; } - - private void HandleInventoryDescendents(Packet Pack) + private static void HandleInventoryDescendents(LLClientView c, Packet Pack) { } @@ -11773,13 +11794,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP #region Dir handlers - private void HandleDirPlacesQuery(Packet Pack) + private static void HandleDirPlacesQuery(LLClientView c, Packet Pack) { DirPlacesQueryPacket dirPlacesQueryPacket = (DirPlacesQueryPacket)Pack; - if (dirPlacesQueryPacket.AgentData.SessionID.NotEqual(m_sessionId) || dirPlacesQueryPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (dirPlacesQueryPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || dirPlacesQueryPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnDirPlacesQuery?.Invoke(this, + c.OnDirPlacesQuery?.Invoke(c, dirPlacesQueryPacket.QueryData.QueryID, Utils.BytesToString( dirPlacesQueryPacket.QueryData.QueryText), @@ -11790,13 +11811,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP dirPlacesQueryPacket.QueryData.QueryStart); } - private void HandleDirFindQuery(Packet Pack) + private static void HandleDirFindQuery(LLClientView c, Packet Pack) { DirFindQueryPacket dirFindQueryPacket = (DirFindQueryPacket)Pack; - if (dirFindQueryPacket.AgentData.SessionID.NotEqual(m_sessionId) || dirFindQueryPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (dirFindQueryPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || dirFindQueryPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnDirFindQuery?.Invoke(this, + c.OnDirFindQuery?.Invoke(c, dirFindQueryPacket.QueryData.QueryID, Utils.BytesToString( dirFindQueryPacket.QueryData.QueryText).Trim(), @@ -11804,13 +11825,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP dirFindQueryPacket.QueryData.QueryStart); } - private void HandleDirLandQuery(Packet Pack) + private static void HandleDirLandQuery(LLClientView c, Packet Pack) { DirLandQueryPacket dirLandQueryPacket = (DirLandQueryPacket)Pack; - if (dirLandQueryPacket.AgentData.SessionID.NotEqual(m_sessionId) || dirLandQueryPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (dirLandQueryPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || dirLandQueryPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnDirLandQuery?.Invoke(this, + c.OnDirLandQuery?.Invoke(c, dirLandQueryPacket.QueryData.QueryID, dirLandQueryPacket.QueryData.QueryFlags, dirLandQueryPacket.QueryData.SearchType, @@ -11819,24 +11840,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP dirLandQueryPacket.QueryData.QueryStart); } - private void HandleDirPopularQuery(Packet Pack) + private static void HandleDirPopularQuery(LLClientView c, Packet Pack) { DirPopularQueryPacket dirPopularQueryPacket = (DirPopularQueryPacket)Pack; - if (dirPopularQueryPacket.AgentData.SessionID.NotEqual(m_sessionId) || dirPopularQueryPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (dirPopularQueryPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || dirPopularQueryPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnDirPopularQuery?.Invoke(this, + c.OnDirPopularQuery?.Invoke(c, dirPopularQueryPacket.QueryData.QueryID, dirPopularQueryPacket.QueryData.QueryFlags); } - private void HandleDirClassifiedQuery(Packet Pack) + private static void HandleDirClassifiedQuery(LLClientView c, Packet Pack) { DirClassifiedQueryPacket dirClassifiedQueryPacket = (DirClassifiedQueryPacket)Pack; - if (dirClassifiedQueryPacket.AgentData.SessionID.NotEqual(m_sessionId) || dirClassifiedQueryPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (dirClassifiedQueryPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || dirClassifiedQueryPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnDirClassifiedQuery?.Invoke(this, + c.OnDirClassifiedQuery?.Invoke(c, dirClassifiedQueryPacket.QueryData.QueryID, Utils.BytesToString( dirClassifiedQueryPacket.QueryData.QueryText), @@ -11845,53 +11866,53 @@ namespace OpenSim.Region.ClientStack.LindenUDP dirClassifiedQueryPacket.QueryData.QueryStart); } - private void HandleEventInfoRequest(Packet Pack) + private static void HandleEventInfoRequest(LLClientView c, Packet Pack) { EventInfoRequestPacket eventInfoRequestPacket = (EventInfoRequestPacket)Pack; - if (eventInfoRequestPacket.AgentData.SessionID.NotEqual(m_sessionId) || eventInfoRequestPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (eventInfoRequestPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || eventInfoRequestPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnEventInfoRequest?.Invoke(this, eventInfoRequestPacket.EventData.EventID); + c.OnEventInfoRequest?.Invoke(c, eventInfoRequestPacket.EventData.EventID); } #endregion #region Calling Card - private void HandleOfferCallingCard(Packet Pack) + private static void HandleOfferCallingCard(LLClientView c, Packet Pack) { OfferCallingCardPacket offerCallingCardPacket = (OfferCallingCardPacket)Pack; - if (offerCallingCardPacket.AgentData.SessionID.NotEqual(m_sessionId) || offerCallingCardPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (offerCallingCardPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || offerCallingCardPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnOfferCallingCard?.Invoke(this, + c.OnOfferCallingCard?.Invoke(c, offerCallingCardPacket.AgentBlock.DestID, offerCallingCardPacket.AgentBlock.TransactionID); } - private void HandleAcceptCallingCard(Packet Pack) + private static void HandleAcceptCallingCard(LLClientView c, Packet Pack) { AcceptCallingCardPacket acceptCallingCardPacket = (AcceptCallingCardPacket)Pack; - if (acceptCallingCardPacket.AgentData.SessionID.NotEqual(m_sessionId) || acceptCallingCardPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (acceptCallingCardPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || acceptCallingCardPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; // according to http://wiki.secondlife.com/wiki/AcceptCallingCard FolderData should // contain exactly one entry if (acceptCallingCardPacket.FolderData.Length > 0) { - OnAcceptCallingCard?.Invoke(this, + c.OnAcceptCallingCard?.Invoke(c, acceptCallingCardPacket.TransactionBlock.TransactionID, acceptCallingCardPacket.FolderData[0].FolderID); } } - private void HandleDeclineCallingCard(Packet Pack) + private static void HandleDeclineCallingCard(LLClientView c, Packet Pack) { DeclineCallingCardPacket declineCallingCardPacket = (DeclineCallingCardPacket)Pack; - if (declineCallingCardPacket.AgentData.SessionID.NotEqual(m_sessionId) || declineCallingCardPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (declineCallingCardPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || declineCallingCardPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnDeclineCallingCard?.Invoke(this, + c.OnDeclineCallingCard?.Invoke(c, declineCallingCardPacket.TransactionBlock.TransactionID); } @@ -11899,81 +11920,82 @@ namespace OpenSim.Region.ClientStack.LindenUDP #region Groups - private void HandleActivateGroup(Packet Pack) + private static void HandleActivateGroup(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; ActivateGroupPacket activateGroupPacket = (ActivateGroupPacket)Pack; - if (activateGroupPacket.AgentData.SessionID.NotEqual(m_sessionId) || activateGroupPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (activateGroupPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || activateGroupPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_GroupsModule.ActivateGroup(this, activateGroupPacket.AgentData.GroupID); + c.m_GroupsModule.ActivateGroup(c, activateGroupPacket.AgentData.GroupID); } - private void HandleGroupVoteHistoryRequest(Packet packet) + private static void HandleGroupVoteHistoryRequest(LLClientView c, Packet packet) { GroupVoteHistoryRequestPacket GroupVoteHistoryRequest = (GroupVoteHistoryRequestPacket)packet; - if (GroupVoteHistoryRequest.AgentData.SessionID.NotEqual(m_sessionId) || GroupVoteHistoryRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (GroupVoteHistoryRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || GroupVoteHistoryRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnGroupVoteHistoryRequest?.Invoke(this, m_agentId, SessionId, GroupVoteHistoryRequest.GroupData.GroupID, GroupVoteHistoryRequest.TransactionData.TransactionID); + c.OnGroupVoteHistoryRequest?.Invoke(c, c.m_agentId, c.SessionId, GroupVoteHistoryRequest.GroupData.GroupID, GroupVoteHistoryRequest.TransactionData.TransactionID); } - private void HandleGroupActiveProposalsRequest(Packet packet) + private static void HandleGroupActiveProposalsRequest(LLClientView c, Packet packet) { GroupActiveProposalsRequestPacket GroupActiveProposalsRequest = (GroupActiveProposalsRequestPacket)packet; - if (GroupActiveProposalsRequest.AgentData.SessionID.NotEqual(m_sessionId) || GroupActiveProposalsRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (GroupActiveProposalsRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || GroupActiveProposalsRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnGroupActiveProposalsRequest?.Invoke(this, m_agentId, SessionId, GroupActiveProposalsRequest.GroupData.GroupID, GroupActiveProposalsRequest.TransactionData.TransactionID); + c.OnGroupActiveProposalsRequest?.Invoke(c, c.m_agentId, c.SessionId, GroupActiveProposalsRequest.GroupData.GroupID, GroupActiveProposalsRequest.TransactionData.TransactionID); } - private void HandleGroupAccountDetailsRequest(Packet packet) + private static void HandleGroupAccountDetailsRequest(LLClientView c, Packet packet) { GroupAccountDetailsRequestPacket GroupAccountDetailsRequest = (GroupAccountDetailsRequestPacket)packet; - if (GroupAccountDetailsRequest.AgentData.SessionID.NotEqual(m_sessionId) || GroupAccountDetailsRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (GroupAccountDetailsRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || GroupAccountDetailsRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnGroupAccountDetailsRequest?.Invoke(this, m_agentId, GroupAccountDetailsRequest.AgentData.GroupID, GroupAccountDetailsRequest.MoneyData.RequestID, SessionId); + c.OnGroupAccountDetailsRequest?.Invoke(c, c.m_agentId, GroupAccountDetailsRequest.AgentData.GroupID, GroupAccountDetailsRequest.MoneyData.RequestID, c.SessionId); } - private void HandleGroupAccountSummaryRequest(Packet packet) + private static void HandleGroupAccountSummaryRequest(LLClientView c, Packet packet) { GroupAccountSummaryRequestPacket GroupAccountSummaryRequest = (GroupAccountSummaryRequestPacket)packet; - if (GroupAccountSummaryRequest.AgentData.SessionID.NotEqual(m_sessionId) || GroupAccountSummaryRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (GroupAccountSummaryRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || GroupAccountSummaryRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnGroupAccountSummaryRequest?.Invoke(this, m_agentId, GroupAccountSummaryRequest.AgentData.GroupID); + c.OnGroupAccountSummaryRequest?.Invoke(c, c.m_agentId, GroupAccountSummaryRequest.AgentData.GroupID); } - private void HandleGroupTransactionsDetailsRequest(Packet packet) + private static void HandleGroupTransactionsDetailsRequest(LLClientView c, Packet packet) { GroupAccountTransactionsRequestPacket GroupAccountTransactionsRequest = (GroupAccountTransactionsRequestPacket)packet; - if (GroupAccountTransactionsRequest.AgentData.SessionID.NotEqual(m_sessionId) || GroupAccountTransactionsRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (GroupAccountTransactionsRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || GroupAccountTransactionsRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnGroupAccountTransactionsRequest?.Invoke(this, m_agentId, GroupAccountTransactionsRequest.AgentData.GroupID,GroupAccountTransactionsRequest.MoneyData.RequestID, SessionId); + c.OnGroupAccountTransactionsRequest?.Invoke(c, c.m_agentId, GroupAccountTransactionsRequest.AgentData.GroupID, + GroupAccountTransactionsRequest.MoneyData.RequestID, c.SessionId); } - private void HandleGroupTitlesRequest(Packet Pack) + private static void HandleGroupTitlesRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; GroupTitlesRequestPacket groupTitlesRequest = (GroupTitlesRequestPacket)Pack; - if (groupTitlesRequest.AgentData.SessionID.NotEqual(m_sessionId) || groupTitlesRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (groupTitlesRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || groupTitlesRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; GroupTitlesReplyPacket groupTitlesReply = (GroupTitlesReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupTitlesReply); groupTitlesReply.AgentData = new GroupTitlesReplyPacket.AgentDataBlock { - AgentID = m_agentId, + AgentID = c.m_agentId, GroupID = groupTitlesRequest.AgentData.GroupID, RequestID = groupTitlesRequest.AgentData.RequestID }; - List<GroupTitlesData> titles = m_GroupsModule.GroupTitlesRequest(this, + List<GroupTitlesData> titles = c.m_GroupsModule.GroupTitlesRequest(c, groupTitlesRequest.AgentData.GroupID); groupTitlesReply.GroupData = new GroupTitlesReplyPacket.GroupDataBlock[titles.Count]; @@ -11988,36 +12010,36 @@ namespace OpenSim.Region.ClientStack.LindenUDP }; } - OutPacket(groupTitlesReply, ThrottleOutPacketType.Task); + c.OutPacket(groupTitlesReply, ThrottleOutPacketType.Task); } UUID lastGroupProfileRequestID = UUID.Zero; double lastGroupProfileRequestTS = Util.GetTimeStampMS(); - private void HandleGroupProfileRequest(Packet Pack) + private static void HandleGroupProfileRequest(LLClientView c, Packet Pack) { - if(m_GroupsModule is null) + if(c.m_GroupsModule is null) return; GroupProfileRequestPacket groupProfileRequest = (GroupProfileRequestPacket)Pack; - if (groupProfileRequest.AgentData.SessionID.NotEqual(m_sessionId) || groupProfileRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (groupProfileRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || groupProfileRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; UUID grpID = groupProfileRequest.GroupData.GroupID; double ts = Util.GetTimeStampMS(); - if(grpID == lastGroupProfileRequestID && ts - lastGroupProfileRequestTS < 10000) + if(grpID == c.lastGroupProfileRequestID && ts - c.lastGroupProfileRequestTS < 10000) return; - lastGroupProfileRequestID = grpID; - lastGroupProfileRequestTS = ts; + c.lastGroupProfileRequestID = grpID; + c.lastGroupProfileRequestTS = ts; GroupProfileReplyPacket groupProfileReply = (GroupProfileReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupProfileReply); groupProfileReply.AgentData = new GroupProfileReplyPacket.AgentDataBlock(); groupProfileReply.GroupData = new GroupProfileReplyPacket.GroupDataBlock(); - groupProfileReply.AgentData.AgentID = m_agentId; + groupProfileReply.AgentData.AgentID = c.m_agentId; - GroupProfileData d = m_GroupsModule.GroupProfileRequest(this, groupProfileRequest.GroupData.GroupID); + GroupProfileData d = c.m_GroupsModule.GroupProfileRequest(c, groupProfileRequest.GroupData.GroupID); if(d.GroupID.IsZero()) // don't send broken data return; @@ -12039,9 +12061,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP groupProfileReply.GroupData.MaturePublish = d.MaturePublish; groupProfileReply.GroupData.OwnerRole = d.OwnerRole; - if (m_scene.Permissions.IsGod(m_agentId) && (!IsGroupMember(groupProfileRequest.GroupData.GroupID))) + if (c.m_scene.Permissions.IsGod(c.m_agentId) && (!c.IsGroupMember(groupProfileRequest.GroupData.GroupID))) { - if (m_scene.TryGetScenePresence(m_agentId, out ScenePresence p)) + if (c.m_scene.TryGetScenePresence(c.m_agentId, out ScenePresence p)) { if (p.IsViewerUIGod) { @@ -12051,24 +12073,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - OutPacket(groupProfileReply, ThrottleOutPacketType.Task); + c.OutPacket(groupProfileReply, ThrottleOutPacketType.Task); - if(grpID == lastGroupProfileRequestID) - lastGroupProfileRequestTS = Util.GetTimeStampMS() - 7000; + if(grpID.Equals(c.lastGroupProfileRequestID)) + c.lastGroupProfileRequestTS = Util.GetTimeStampMS() - 7000; } - private void HandleGroupMembersRequest(Packet Pack) + private static void HandleGroupMembersRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; GroupMembersRequestPacket groupMembersRequestPacket = (GroupMembersRequestPacket)Pack; - if (groupMembersRequestPacket.AgentData.SessionID.NotEqual(m_sessionId) || groupMembersRequestPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (groupMembersRequestPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || groupMembersRequestPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; List<GroupMembersData> members = - m_GroupsModule.GroupMembersRequest(this, groupMembersRequestPacket.GroupData.GroupID); + c.m_GroupsModule.GroupMembersRequest(c, groupMembersRequestPacket.GroupData.GroupID); int memberCount = members.Count; int indx = 0; @@ -12084,7 +12106,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP groupMembersReply.GroupData = new GroupMembersReplyPacket.GroupDataBlock(); groupMembersReply.MemberData = new GroupMembersReplyPacket.MemberDataBlock[blockCount]; - groupMembersReply.AgentData.AgentID = m_agentId; + groupMembersReply.AgentData.AgentID = c.m_agentId; groupMembersReply.GroupData.GroupID = groupMembersRequestPacket.GroupData.GroupID; groupMembersReply.GroupData.RequestID = groupMembersRequestPacket.GroupData.RequestID; groupMembersReply.GroupData.MemberCount = memberCount; @@ -12102,28 +12124,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP IsOwner = m.IsOwner }; } - OutPacket(groupMembersReply, ThrottleOutPacketType.Task); + c.OutPacket(groupMembersReply, ThrottleOutPacketType.Task); } } - private void HandleGroupRoleDataRequest(Packet Pack) + private static void HandleGroupRoleDataRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; GroupRoleDataRequestPacket groupRolesRequest = (GroupRoleDataRequestPacket)Pack; - if (groupRolesRequest.AgentData.SessionID.NotEqual(m_sessionId) || groupRolesRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (groupRolesRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || groupRolesRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; GroupRoleDataReplyPacket groupRolesReply = (GroupRoleDataReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupRoleDataReply); - groupRolesReply.AgentData = new GroupRoleDataReplyPacket.AgentDataBlock { AgentID = m_agentId }; + groupRolesReply.AgentData = new GroupRoleDataReplyPacket.AgentDataBlock { AgentID = c.m_agentId }; groupRolesReply.GroupData = new GroupRoleDataReplyPacket.GroupDataBlock { GroupID = groupRolesRequest.GroupData.GroupID, RequestID = groupRolesRequest.GroupData.RequestID }; - List<GroupRolesData> titles = m_GroupsModule.GroupRoleDataRequest(this, + List<GroupRolesData> titles = c.m_GroupsModule.GroupRoleDataRequest(c, groupRolesRequest.GroupData.GroupID); groupRolesReply.GroupData.RoleCount = titles.Count; groupRolesReply.RoleData = new GroupRoleDataReplyPacket.RoleDataBlock[titles.Count]; @@ -12143,19 +12165,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP i++; } - OutPacket(groupRolesReply, ThrottleOutPacketType.Task); + c.OutPacket(groupRolesReply, ThrottleOutPacketType.Task); } - private void HandleGroupRoleMembersRequest(Packet Pack) + private static void HandleGroupRoleMembersRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; GroupRoleMembersRequestPacket groupRoleMembersRequest = (GroupRoleMembersRequestPacket)Pack; - if (groupRoleMembersRequest.AgentData.SessionID.NotEqual(m_sessionId) || groupRoleMembersRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (groupRoleMembersRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || groupRoleMembersRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - List<GroupRoleMembersData> mappings = m_GroupsModule.GroupRoleMembersRequest(this, + List<GroupRoleMembersData> mappings = c.m_GroupsModule.GroupRoleMembersRequest(c, groupRoleMembersRequest.GroupData.GroupID); int mappingsCount = mappings.Count; @@ -12169,7 +12191,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP GroupRoleMembersReplyPacket groupRoleMembersReply = (GroupRoleMembersReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupRoleMembersReply); groupRoleMembersReply.AgentData = new GroupRoleMembersReplyPacket.AgentDataBlock { - AgentID = m_agentId, + AgentID = c.m_agentId, GroupID = groupRoleMembersRequest.GroupData.GroupID, RequestID = groupRoleMembersRequest.GroupData.RequestID, @@ -12190,20 +12212,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP }; } - OutPacket(groupRoleMembersReply, ThrottleOutPacketType.Task); + c.OutPacket(groupRoleMembersReply, ThrottleOutPacketType.Task); } } - private void HandleCreateGroupRequest(Packet Pack) + private static void HandleCreateGroupRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; CreateGroupRequestPacket createGroupRequest = (CreateGroupRequestPacket)Pack; - if (createGroupRequest.AgentData.SessionID.NotEqual(m_sessionId) || createGroupRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (createGroupRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || createGroupRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_GroupsModule.CreateGroup(this, + c.m_GroupsModule.CreateGroup(c, Utils.BytesToString(createGroupRequest.GroupData.Name), Utils.BytesToString(createGroupRequest.GroupData.Charter), createGroupRequest.GroupData.ShowInList, @@ -12214,16 +12236,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP createGroupRequest.GroupData.MaturePublish); } - private void HandleUpdateGroupInfo(Packet Pack) + private static void HandleUpdateGroupInfo(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; UpdateGroupInfoPacket updateGroupInfo = (UpdateGroupInfoPacket)Pack; - if (updateGroupInfo.AgentData.SessionID.NotEqual(m_sessionId) || updateGroupInfo.AgentData.AgentID.NotEqual(m_agentId)) + if (updateGroupInfo.AgentData.SessionID.NotEqual(c.m_sessionId) || updateGroupInfo.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_GroupsModule.UpdateGroupInfo(this, + c.m_GroupsModule.UpdateGroupInfo(c, updateGroupInfo.GroupData.GroupID, Utils.BytesToString(updateGroupInfo.GroupData.Charter), updateGroupInfo.GroupData.ShowInList, @@ -12234,60 +12256,60 @@ namespace OpenSim.Region.ClientStack.LindenUDP updateGroupInfo.GroupData.MaturePublish); } - private void HandleSetGroupAcceptNotices(Packet Pack) + private static void HandleSetGroupAcceptNotices(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; SetGroupAcceptNoticesPacket setGroupAcceptNotices = (SetGroupAcceptNoticesPacket)Pack; - if (setGroupAcceptNotices.AgentData.SessionID.NotEqual(m_sessionId) || setGroupAcceptNotices.AgentData.AgentID.NotEqual(m_agentId)) + if (setGroupAcceptNotices.AgentData.SessionID.NotEqual(c.m_sessionId) || setGroupAcceptNotices.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_GroupsModule.SetGroupAcceptNotices(this, + c.m_GroupsModule.SetGroupAcceptNotices(c, setGroupAcceptNotices.Data.GroupID, setGroupAcceptNotices.Data.AcceptNotices, setGroupAcceptNotices.NewData.ListInProfile); } - private void HandleGroupTitleUpdate(Packet Pack) + private static void HandleGroupTitleUpdate(LLClientView c, Packet Pack) { GroupTitleUpdatePacket groupTitleUpdate = (GroupTitleUpdatePacket)Pack; - if (groupTitleUpdate.AgentData.SessionID.NotEqual(m_sessionId) || groupTitleUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (groupTitleUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || groupTitleUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_GroupsModule.GroupTitleUpdate(this, + c.m_GroupsModule.GroupTitleUpdate(c, groupTitleUpdate.AgentData.GroupID, groupTitleUpdate.AgentData.TitleRoleID); } - private void HandleParcelDeedToGroup(Packet Pack) + private static void HandleParcelDeedToGroup(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; ParcelDeedToGroupPacket parcelDeedToGroup = (ParcelDeedToGroupPacket)Pack; - if (parcelDeedToGroup.AgentData.SessionID.NotEqual(m_sessionId) || parcelDeedToGroup.AgentData.AgentID.NotEqual(m_agentId)) + if (parcelDeedToGroup.AgentData.SessionID.NotEqual(c.m_sessionId) || parcelDeedToGroup.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnParcelDeedToGroup?.Invoke(parcelDeedToGroup.Data.LocalID, parcelDeedToGroup.Data.GroupID, this); + c.OnParcelDeedToGroup?.Invoke(parcelDeedToGroup.Data.LocalID, parcelDeedToGroup.Data.GroupID, c); } - private void HandleGroupNoticesListRequest(Packet Pack) + private static void HandleGroupNoticesListRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; GroupNoticesListRequestPacket groupNoticesListRequest = (GroupNoticesListRequestPacket)Pack; - if (groupNoticesListRequest.AgentData.SessionID.NotEqual(m_sessionId) || groupNoticesListRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (groupNoticesListRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || groupNoticesListRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - GroupNoticeData[] gn = m_GroupsModule.GroupNoticesListRequest(this, groupNoticesListRequest.Data.GroupID); + GroupNoticeData[] gn = c.m_GroupsModule.GroupNoticesListRequest(c, groupNoticesListRequest.Data.GroupID); GroupNoticesListReplyPacket groupNoticesListReply = (GroupNoticesListReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupNoticesListReply); groupNoticesListReply.AgentData = new GroupNoticesListReplyPacket.AgentDataBlock { - AgentID = m_agentId, + AgentID = c.m_agentId, GroupID = groupNoticesListRequest.Data.GroupID }; @@ -12307,33 +12329,33 @@ namespace OpenSim.Region.ClientStack.LindenUDP }; } - OutPacket(groupNoticesListReply, ThrottleOutPacketType.Task); + c.OutPacket(groupNoticesListReply, ThrottleOutPacketType.Task); } - private void HandleGroupNoticeRequest(Packet Pack) + private static void HandleGroupNoticeRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; GroupNoticeRequestPacket groupNoticeRequest = (GroupNoticeRequestPacket)Pack; - if (groupNoticeRequest.AgentData.SessionID.NotEqual(m_sessionId) || groupNoticeRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (groupNoticeRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || groupNoticeRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_GroupsModule.GroupNoticeRequest(this, groupNoticeRequest.Data.GroupNoticeID); + c.m_GroupsModule.GroupNoticeRequest(c, groupNoticeRequest.Data.GroupNoticeID); } - private void HandleGroupRoleUpdate(Packet Pack) + private static void HandleGroupRoleUpdate(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; GroupRoleUpdatePacket groupRoleUpdate = (GroupRoleUpdatePacket)Pack; - if (groupRoleUpdate.AgentData.SessionID.NotEqual(m_sessionId) || groupRoleUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (groupRoleUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || groupRoleUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (GroupRoleUpdatePacket.RoleDataBlock d in groupRoleUpdate.RoleData) { - m_GroupsModule.GroupRoleUpdate(this, + c.m_GroupsModule.GroupRoleUpdate(c, groupRoleUpdate.AgentData.GroupID, d.RoleID, Utils.BytesToString(d.Name), @@ -12342,82 +12364,82 @@ namespace OpenSim.Region.ClientStack.LindenUDP d.Powers, d.UpdateType); } - m_GroupsModule.NotifyChange(groupRoleUpdate.AgentData.GroupID); + c.m_GroupsModule.NotifyChange(groupRoleUpdate.AgentData.GroupID); } - private void HandleGroupRoleChanges(Packet Pack) + private static void HandleGroupRoleChanges(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; GroupRoleChangesPacket groupRoleChanges = (GroupRoleChangesPacket)Pack; - if (groupRoleChanges.AgentData.SessionID.NotEqual(m_sessionId) || groupRoleChanges.AgentData.AgentID.NotEqual(m_agentId)) + if (groupRoleChanges.AgentData.SessionID.NotEqual(c.m_sessionId) || groupRoleChanges.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (GroupRoleChangesPacket.RoleChangeBlock d in groupRoleChanges.RoleChange) { - m_GroupsModule.GroupRoleChanges(this, + c.m_GroupsModule.GroupRoleChanges(c, groupRoleChanges.AgentData.GroupID, d.RoleID, d.MemberID, d.Change); } - m_GroupsModule.NotifyChange(groupRoleChanges.AgentData.GroupID); + c.m_GroupsModule.NotifyChange(groupRoleChanges.AgentData.GroupID); } - private void HandleJoinGroupRequest(Packet Pack) + private static void HandleJoinGroupRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; JoinGroupRequestPacket joinGroupRequest = (JoinGroupRequestPacket)Pack; - if (joinGroupRequest.AgentData.SessionID.NotEqual(m_sessionId) || joinGroupRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (joinGroupRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || joinGroupRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_GroupsModule.JoinGroupRequest(this, joinGroupRequest.GroupData.GroupID); + c.m_GroupsModule.JoinGroupRequest(c, joinGroupRequest.GroupData.GroupID); } - private void HandleLeaveGroupRequest(Packet Pack) + private static void HandleLeaveGroupRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; LeaveGroupRequestPacket leaveGroupRequest = (LeaveGroupRequestPacket)Pack; - if (leaveGroupRequest.AgentData.SessionID.NotEqual(m_sessionId) || leaveGroupRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (leaveGroupRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || leaveGroupRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - m_GroupsModule.LeaveGroupRequest(this, leaveGroupRequest.GroupData.GroupID); + c.m_GroupsModule.LeaveGroupRequest(c, leaveGroupRequest.GroupData.GroupID); } - private void HandleEjectGroupMemberRequest(Packet Pack) + private static void HandleEjectGroupMemberRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; EjectGroupMemberRequestPacket ejectGroupMemberRequest = (EjectGroupMemberRequestPacket)Pack; - if (ejectGroupMemberRequest.AgentData.SessionID.NotEqual(m_sessionId) || ejectGroupMemberRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (ejectGroupMemberRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || ejectGroupMemberRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (EjectGroupMemberRequestPacket.EjectDataBlock e in ejectGroupMemberRequest.EjectData) { - m_GroupsModule.EjectGroupMemberRequest(this, + c.m_GroupsModule.EjectGroupMemberRequest(c, ejectGroupMemberRequest.GroupData.GroupID, e.EjecteeID); } } - private void HandleInviteGroupRequest(Packet Pack) + private static void HandleInviteGroupRequest(LLClientView c, Packet Pack) { - if (m_GroupsModule is null) + if (c.m_GroupsModule is null) return; InviteGroupRequestPacket inviteGroupRequest = (InviteGroupRequestPacket)Pack; - if (inviteGroupRequest.AgentData.SessionID.NotEqual(m_sessionId) || inviteGroupRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (inviteGroupRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || inviteGroupRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; foreach (InviteGroupRequestPacket.InviteDataBlock b in inviteGroupRequest.InviteData) { - m_GroupsModule.InviteGroupRequest(this, + c.m_GroupsModule.InviteGroupRequest(c, inviteGroupRequest.GroupData.GroupID, b.InviteeID, b.RoleID); @@ -12426,52 +12448,52 @@ namespace OpenSim.Region.ClientStack.LindenUDP #endregion Groups - private void HandleStartLure(Packet Pack) + private static void HandleStartLure(LLClientView c, Packet Pack) { - if(OnStartLure is null) + if(c.OnStartLure is null) return; StartLurePacket startLureRequest = (StartLurePacket)Pack; - if (startLureRequest.AgentData.SessionID.NotEqual(m_sessionId) || startLureRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (startLureRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || startLureRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; for (int i = 0 ; i < startLureRequest.TargetData.Length ; i++) { - OnStartLure?.Invoke(startLureRequest.Info.LureType, + c.OnStartLure?.Invoke(startLureRequest.Info.LureType, Utils.BytesToString( startLureRequest.Info.Message), startLureRequest.TargetData[i].TargetID, - this); + c); } } - private void HandleTeleportLureRequest(Packet Pack) + private static void HandleTeleportLureRequest(LLClientView c, Packet Pack) { TeleportLureRequestPacket teleportLureRequest = (TeleportLureRequestPacket)Pack; - if (teleportLureRequest.Info.SessionID.NotEqual(m_sessionId) || teleportLureRequest.Info.AgentID.NotEqual(m_agentId)) + if (teleportLureRequest.Info.SessionID.NotEqual(c.m_sessionId) || teleportLureRequest.Info.AgentID.NotEqual(c.m_agentId)) return; - OnTeleportLureRequest?.Invoke( + c.OnTeleportLureRequest?.Invoke( teleportLureRequest.Info.LureID, teleportLureRequest.Info.TeleportFlags, - this); + c); } - private void HandleClassifiedInfoRequest(Packet Pack) + private static void HandleClassifiedInfoRequest(LLClientView c, Packet Pack) { ClassifiedInfoRequestPacket classifiedInfoRequest = (ClassifiedInfoRequestPacket)Pack; - if (classifiedInfoRequest.AgentData.SessionID.NotEqual(m_sessionId) || classifiedInfoRequest.AgentData.AgentID.NotEqual(m_agentId)) + if (classifiedInfoRequest.AgentData.SessionID.NotEqual(c.m_sessionId) || classifiedInfoRequest.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnClassifiedInfoRequest?.Invoke( + c.OnClassifiedInfoRequest?.Invoke( classifiedInfoRequest.Data.ClassifiedID, - this); + c); } - private void HandleClassifiedInfoUpdate(Packet Pack) + private static void HandleClassifiedInfoUpdate(LLClientView c, Packet Pack) { ClassifiedInfoUpdatePacket classifiedInfoUpdate = (ClassifiedInfoUpdatePacket)Pack; - if (classifiedInfoUpdate.AgentData.SessionID.NotEqual(m_sessionId) || classifiedInfoUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (classifiedInfoUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || classifiedInfoUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; // fix classifiedFlags maturity @@ -12479,7 +12501,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if ((classifiedFlags & 0x4e) == 0) // if none classifiedFlags |= 0x4; // pg - OnClassifiedInfoUpdate?.Invoke( + c.OnClassifiedInfoUpdate?.Invoke( classifiedInfoUpdate.Data.ClassifiedID, classifiedInfoUpdate.Data.Category, Utils.BytesToString( @@ -12493,103 +12515,103 @@ namespace OpenSim.Region.ClientStack.LindenUDP classifiedInfoUpdate.Data.PosGlobal), classifiedFlags, classifiedInfoUpdate.Data.PriceForListing, - this); + c); } - private void HandleClassifiedDelete(Packet Pack) + private static void HandleClassifiedDelete(LLClientView c, Packet Pack) { ClassifiedDeletePacket classifiedDelete = (ClassifiedDeletePacket)Pack; - if (classifiedDelete.AgentData.SessionID.NotEqual(m_sessionId) || classifiedDelete.AgentData.AgentID.NotEqual(m_agentId)) + if (classifiedDelete.AgentData.SessionID.NotEqual(c.m_sessionId) || classifiedDelete.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnClassifiedDelete?.Invoke( + c.OnClassifiedDelete?.Invoke( classifiedDelete.Data.ClassifiedID, - this); + c); } - private void HandleClassifiedGodDelete(Packet Pack) + private static void HandleClassifiedGodDelete(LLClientView c, Packet Pack) { ClassifiedGodDeletePacket classifiedGodDelete = (ClassifiedGodDeletePacket)Pack; - if (classifiedGodDelete.AgentData.SessionID.NotEqual(m_sessionId) || classifiedGodDelete.AgentData.AgentID.NotEqual(m_agentId)) + if (classifiedGodDelete.AgentData.SessionID.NotEqual(c.m_sessionId) || classifiedGodDelete.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnClassifiedGodDelete?.Invoke( + c.OnClassifiedGodDelete?.Invoke( classifiedGodDelete.Data.ClassifiedID, classifiedGodDelete.Data.QueryID, - this); + c); } - private void HandleEventGodDelete(Packet Pack) + private static void HandleEventGodDelete(LLClientView c, Packet Pack) { EventGodDeletePacket eventGodDelete = (EventGodDeletePacket)Pack; - if (eventGodDelete.AgentData.SessionID.NotEqual(m_sessionId) || eventGodDelete.AgentData.AgentID.NotEqual(m_agentId)) + if (eventGodDelete.AgentData.SessionID.NotEqual(c.m_sessionId) || eventGodDelete.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnEventGodDelete?.Invoke( + c.OnEventGodDelete?.Invoke( eventGodDelete.EventData.EventID, eventGodDelete.QueryData.QueryID, Utils.BytesToString( eventGodDelete.QueryData.QueryText), eventGodDelete.QueryData.QueryFlags, eventGodDelete.QueryData.QueryStart, - this); + c); } - private void HandleEventNotificationAddRequest(Packet Pack) + private static void HandleEventNotificationAddRequest(LLClientView c, Packet Pack) { EventNotificationAddRequestPacket eventNotificationAdd = (EventNotificationAddRequestPacket)Pack; - if (eventNotificationAdd.AgentData.SessionID.NotEqual(m_sessionId) || eventNotificationAdd.AgentData.AgentID.NotEqual(m_agentId)) + if (eventNotificationAdd.AgentData.SessionID.NotEqual(c.m_sessionId) || eventNotificationAdd.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnEventNotificationAddRequest?.Invoke(eventNotificationAdd.EventData.EventID, this); + c.OnEventNotificationAddRequest?.Invoke(eventNotificationAdd.EventData.EventID, c); } - private void HandleEventNotificationRemoveRequest(Packet Pack) + private static void HandleEventNotificationRemoveRequest(LLClientView c, Packet Pack) { EventNotificationRemoveRequestPacket eventNotificationRemove = (EventNotificationRemoveRequestPacket)Pack; - if (eventNotificationRemove.AgentData.SessionID.NotEqual(m_sessionId) || eventNotificationRemove.AgentData.AgentID.NotEqual(m_agentId)) + if (eventNotificationRemove.AgentData.SessionID.NotEqual(c.m_sessionId) || eventNotificationRemove.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnEventNotificationRemoveRequest?.Invoke(eventNotificationRemove.EventData.EventID, this); + c.OnEventNotificationRemoveRequest?.Invoke(eventNotificationRemove.EventData.EventID, c); } - private void HandleRetrieveInstantMessages(Packet Pack) + private static void HandleRetrieveInstantMessages(LLClientView c, Packet Pack) { RetrieveInstantMessagesPacket rimpInstantMessagePack = (RetrieveInstantMessagesPacket)Pack; - if (rimpInstantMessagePack.AgentData.SessionID.NotEqual(m_sessionId) || rimpInstantMessagePack.AgentData.AgentID.NotEqual(m_agentId)) + if (rimpInstantMessagePack.AgentData.SessionID.NotEqual(c.m_sessionId) || rimpInstantMessagePack.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnRetrieveInstantMessages?.Invoke(this); + c.OnRetrieveInstantMessages?.Invoke(c); } - private void HandlePickDelete(Packet Pack) + private static void HandlePickDelete(LLClientView c, Packet Pack) { PickDeletePacket pickDelete = (PickDeletePacket)Pack; - if (pickDelete.AgentData.SessionID.NotEqual(m_sessionId) || pickDelete.AgentData.AgentID.NotEqual(m_agentId)) + if (pickDelete.AgentData.SessionID.NotEqual(c.m_sessionId) || pickDelete.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnPickDelete?.Invoke(this, pickDelete.Data.PickID); + c.OnPickDelete?.Invoke(c, pickDelete.Data.PickID); } - private void HandlePickGodDelete(Packet Pack) + private static void HandlePickGodDelete(LLClientView c, Packet Pack) { PickGodDeletePacket pickGodDelete = (PickGodDeletePacket)Pack; - if (pickGodDelete.AgentData.SessionID.NotEqual(m_sessionId) || pickGodDelete.AgentData.AgentID.NotEqual(m_agentId)) + if (pickGodDelete.AgentData.SessionID.NotEqual(c.m_sessionId) || pickGodDelete.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnPickGodDelete?.Invoke(this, + c.OnPickGodDelete?.Invoke(c, pickGodDelete.AgentData.AgentID, pickGodDelete.Data.PickID, pickGodDelete.Data.QueryID); } - private void HandlePickInfoUpdate(Packet Pack) + private static void HandlePickInfoUpdate(LLClientView c, Packet Pack) { PickInfoUpdatePacket pickInfoUpdate = (PickInfoUpdatePacket)Pack; - if (pickInfoUpdate.AgentData.SessionID.NotEqual(m_sessionId) || pickInfoUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (pickInfoUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || pickInfoUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnPickInfoUpdate?.Invoke(this, + c.OnPickInfoUpdate?.Invoke(c, pickInfoUpdate.Data.PickID, pickInfoUpdate.Data.CreatorID, pickInfoUpdate.Data.TopPick, @@ -12600,24 +12622,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP pickInfoUpdate.Data.Enabled); } - private void HandleAvatarNotesUpdate(Packet Pack) + private static void HandleAvatarNotesUpdate(LLClientView c, Packet Pack) { AvatarNotesUpdatePacket avatarNotesUpdate = (AvatarNotesUpdatePacket)Pack; - if (avatarNotesUpdate.AgentData.SessionID.NotEqual(m_sessionId) || avatarNotesUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (avatarNotesUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || avatarNotesUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnAvatarNotesUpdate?.Invoke(this, + c.OnAvatarNotesUpdate?.Invoke(c, avatarNotesUpdate.Data.TargetID, Utils.BytesToString(avatarNotesUpdate.Data.Notes)); } - private void HandleAvatarInterestsUpdate(Packet Pack) + private static void HandleAvatarInterestsUpdate(LLClientView c, Packet Pack) { AvatarInterestsUpdatePacket avatarInterestUpdate = (AvatarInterestsUpdatePacket)Pack; - if (avatarInterestUpdate.AgentData.SessionID.NotEqual(m_sessionId) || avatarInterestUpdate.AgentData.AgentID.NotEqual(m_agentId)) + if (avatarInterestUpdate.AgentData.SessionID.NotEqual(c.m_sessionId) || avatarInterestUpdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnAvatarInterestUpdate?.Invoke(this, + c.OnAvatarInterestUpdate?.Invoke(c, avatarInterestUpdate.PropertiesData.WantToMask, Utils.BytesToString(avatarInterestUpdate.PropertiesData.WantToText), avatarInterestUpdate.PropertiesData.SkillsMask, @@ -12625,13 +12647,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP Utils.BytesToString(avatarInterestUpdate.PropertiesData.LanguagesText)); } - private void HandleGrantUserRights(Packet Pack) + private static void HandleGrantUserRights(LLClientView c, Packet Pack) { GrantUserRightsPacket GrantUserRights = (GrantUserRightsPacket)Pack; - if (GrantUserRights.AgentData.SessionID.NotEqual(m_sessionId) || GrantUserRights.AgentData.AgentID.NotEqual(m_agentId)) + if (GrantUserRights.AgentData.SessionID.NotEqual(c.m_sessionId) || GrantUserRights.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnGrantUserRights?.Invoke(this, + c.OnGrantUserRights?.Invoke(c, GrantUserRights.Rights[0].AgentRelated, GrantUserRights.Rights[0].RelatedRights); } @@ -12639,43 +12661,43 @@ namespace OpenSim.Region.ClientStack.LindenUDP private double m_nextRevokePermissionsTime = Double.MinValue; private uint m_lastRevokePermissionsSeq = uint.MinValue; - private void HandleRevokePermissions(Packet Pack) + private static void HandleRevokePermissions(LLClientView c, Packet Pack) { RevokePermissionsPacket pkt = (RevokePermissionsPacket)Pack; - if (pkt.AgentData.SessionID.NotEqual(m_sessionId) || pkt .AgentData.AgentID.NotEqual(m_agentId)) + if (pkt.AgentData.SessionID.NotEqual(c.m_sessionId) || pkt .AgentData.AgentID.NotEqual(c.m_agentId)) return; uint thisSeq = pkt.Header.Sequence; - if (thisSeq == m_lastRevokePermissionsSeq) + if (thisSeq == c.m_lastRevokePermissionsSeq) return; - m_lastRevokePermissionsSeq = thisSeq; + c.m_lastRevokePermissionsSeq = thisSeq; - ScenePresence sp = (ScenePresence)SceneAgent; + ScenePresence sp = (ScenePresence)c.SceneAgent; if(sp != null && !sp.IsDeleted && !sp.IsInTransit) { UUID objectID = pkt.Data.ObjectID; double now = Util.GetTimeStampMS(); - if (now < m_nextRevokePermissionsTime) + if (now < c.m_nextRevokePermissionsTime) return; - if (objectID == m_scene.RegionInfo.RegionID) - m_nextRevokePermissionsTime = now + 2000; + if (objectID == c.m_scene.RegionInfo.RegionID) + c.m_nextRevokePermissionsTime = now + 2000; else - m_nextRevokePermissionsTime = now + 50; + c.m_nextRevokePermissionsTime = now + 50; uint permissions = pkt.Data.ObjectPermissions; sp.HandleRevokePermissions(objectID , permissions); } } - private void HandlePlacesQuery(Packet Pack) + private static void HandlePlacesQuery(LLClientView c, Packet Pack) { PlacesQueryPacket placesQueryPacket = (PlacesQueryPacket)Pack; - if (placesQueryPacket.AgentData.SessionID.NotEqual(m_sessionId) || placesQueryPacket.AgentData.AgentID.NotEqual(m_agentId)) + if (placesQueryPacket.AgentData.SessionID.NotEqual(c.m_sessionId) || placesQueryPacket.AgentData.AgentID.NotEqual(c.m_agentId)) return; - OnPlacesQuery?.Invoke(placesQueryPacket.AgentData.QueryID, + c.OnPlacesQuery?.Invoke(placesQueryPacket.AgentData.QueryID, placesQueryPacket.TransactionData.TransactionID, Utils.BytesToString( placesQueryPacket.QueryData.QueryText), @@ -12683,7 +12705,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP (byte)placesQueryPacket.QueryData.Category, Utils.BytesToString( placesQueryPacket.QueryData.SimName), - this); + c); } #endregion Packet Handlers @@ -12699,20 +12721,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(scriptQuestion, ThrottleOutPacketType.Task); } - /// <summary> - /// Handler called when we receive a logout packet. - /// </summary> - /// <param name="client"></param> - /// <param name="packet"></param> - /// <returns></returns> - protected virtual void HandleLogout(Packet packet) + protected static void HandleLogout(LLClientView c, Packet packet) { - if (packet.Type == PacketType.LogoutRequest) + var lrp = (LogoutRequestPacket)packet; + if (lrp.AgentData.SessionID.Equals(c.m_sessionId) && lrp.AgentData.AgentID.Equals(c.m_agentId)) { - if (((LogoutRequestPacket)packet).AgentData.SessionID.NotEqual(m_sessionId)) - return; + m_log.Info($"[CLIENT]: Got a logout request for {c.Name} in {c.Scene.Name}"); + c.OnLogout?.Invoke(c); } - Logout(this); } /// <summary> @@ -12729,30 +12745,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// <summary> /// </summary> /// <remarks> - /// At the moment, we always reply that there is no cached texture. /// </remarks> /// <param name="simclient"></param> /// <param name="packet"></param> /// <returns></returns> - - protected void HandleAgentTextureCached(Packet packet) + protected static void HandleAgentTextureCached(LLClientView c, Packet packet) { //m_log.Debug("texture cached: " + packet.ToString()); AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet; AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse); - if (cachedtex.AgentData.SessionID.NotEqual(m_sessionId) || cachedtex.AgentData.AgentID.NotEqual(m_agentId)) + if (cachedtex.AgentData.SessionID.NotEqual(c.m_sessionId) || cachedtex.AgentData.AgentID.NotEqual(c.m_agentId)) return; - ScenePresence p = m_scene.GetScenePresence(m_agentId); - if(p is null) + ScenePresence p = c.m_scene.GetScenePresence(c.m_agentId); + if (p is null) return; WearableCacheItem[] cacheItems = p.Appearance?.WearableCacheItems; - cachedresp.AgentData.AgentID = m_agentId; - cachedresp.AgentData.SessionID = m_sessionId; + cachedresp.AgentData.AgentID = c.m_agentId; + cachedresp.AgentData.SessionID = c.m_sessionId; cachedresp.AgentData.SerialNum = cachedtex.AgentData.SerialNum; cachedresp.WearableData = new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length]; @@ -12796,7 +12810,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } cachedresp.Header.Zerocoded = true; - OutPacket(cachedresp, ThrottleOutPacketType.Task); + c.OutPacket(cachedresp, ThrottleOutPacketType.Task); } /// <summary> @@ -12834,17 +12848,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(cachedresp, ThrottleOutPacketType.Task); } - protected void HandleMultipleObjUpdate(Packet packet) + protected static void HandleMultipleObjUpdate(LLClientView c, Packet packet) { MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet; - if (multipleupdate.AgentData.SessionID.NotEqual(m_sessionId) || multipleupdate.AgentData.AgentID.NotEqual(m_agentId)) + if (multipleupdate.AgentData.SessionID.NotEqual(c.m_sessionId) || multipleupdate.AgentData.AgentID.NotEqual(c.m_agentId)) return; // m_log.DebugFormat( // "[CLIENT]: Incoming MultipleObjectUpdatePacket contained {0} blocks", multipleupdate.ObjectData.Length); - Scene tScene = (Scene)m_scene; + Scene tScene = c.m_scene; for (int i = 0; i < multipleupdate.ObjectData.Length; i++) { @@ -12859,11 +12873,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (part is null) { // It's a ghost! tell the client to delete it from view. - SendKillObject(new List<uint> { localId }); + c.SendKillObject([localId]); } else { - ClientChangeObject updatehandler = onClientChangeObject; + ClientChangeObject updatehandler = c.onClientChangeObject; if (updatehandler != null) { @@ -12887,14 +12901,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.position = new Vector3(block.Data, 0); udata.change = ObjectChangeType.primP; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 2: // rotation sp udata.rotation = new Quaternion(block.Data, 0, true); udata.change = ObjectChangeType.primR; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 3: // position plus rotation @@ -12902,21 +12916,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.rotation = new Quaternion(block.Data, 12, true); udata.change = ObjectChangeType.primPR; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 4: // scale sp udata.scale = new Vector3(block.Data, 0); udata.change = ObjectChangeType.primS; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 0x14: // uniform scale sp udata.scale = new Vector3(block.Data, 0); udata.change = ObjectChangeType.primUS; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 5: // scale and position sp @@ -12924,7 +12938,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.scale = new Vector3(block.Data, 12); udata.change = ObjectChangeType.primPS; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 0x15: //uniform scale and position @@ -12932,7 +12946,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.scale = new Vector3(block.Data, 12); udata.change = ObjectChangeType.primPUS; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; // now group related (bit 4) @@ -12940,14 +12954,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.position = new Vector3(block.Data, 0); udata.change = ObjectChangeType.groupP; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 0x0A: // (8 + 2) group rotation udata.rotation = new Quaternion(block.Data, 0, true); udata.change = ObjectChangeType.groupR; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 0x0B: //( 8 + 2 + 1) group rotation and position @@ -12955,7 +12969,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.rotation = new Quaternion(block.Data, 12, true); udata.change = ObjectChangeType.groupPR; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 0x0C: // (8 + 4) group scale @@ -12966,7 +12980,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.scale = new Vector3(block.Data, 0); udata.change = ObjectChangeType.groupS; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; @@ -12977,14 +12991,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.scale = new Vector3(block.Data, 12); udata.change = ObjectChangeType.groupPS; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 0x1C: // (0x10 + 8 + 4 ) group scale UNIFORM udata.scale = new Vector3(block.Data, 0); udata.change = ObjectChangeType.groupUS; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; case 0x1D: // (UNIFORM + GROUP + SCALE + POS) @@ -12992,7 +13006,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP udata.scale = new Vector3(block.Data, 12); udata.change = ObjectChangeType.groupPUS; - updatehandler(localId, udata, this); + updatehandler(localId, udata, c); break; default: @@ -13642,7 +13656,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// Should this packet be handled asynchronously? /// </summary> public bool Async; + } + private struct StaticPacketProcessor + { + public StaticPacketMethod method; + public bool Async; + public StaticPacketProcessor(StaticPacketMethod m, bool a) + { + method = m; + Async = a; + } } public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)