public void HandleDeleteShapes(LitePeer peer, OperationRequest operationRequest, SendParameters sendParameters) { var req = DeleteShapesRequest.Read(operationRequest.Parameters); var owner = req.initialOwnerId; var shapesBeingRemoved = _doc.GetShapes().Where(sh => sh.InitialOwner() == owner && sh.ShapeCode() != VdShapeType.Badge && sh.ShapeCode() != VdShapeType.Cluster && sh.ShapeCode() != VdShapeType.ClusterLink ); //check permissions foreach (var sr in shapesBeingRemoved) { if (!_doc.editingPermission(sr, owner)) { return; } } //ok, remove foreach (var sr in shapesBeingRemoved.ToArray()) { UnlockDeleteBroadcast(sr.Id(), req.ownerId); } _pendingChanges = true; }