示例#1
0
 public IEvent CreateNewEvent(
     ulong idRundownEvent           = 0,
     ulong idEventBinding           = 0,
     VideoLayer videoLayer          = VideoLayer.None,
     TEventType eventType           = TEventType.Rundown,
     TStartType startType           = TStartType.None,
     TPlayState playState           = TPlayState.Scheduled,
     DateTime scheduledTime         = default(DateTime),
     TimeSpan duration              = default(TimeSpan),
     TimeSpan scheduledDelay        = default(TimeSpan),
     TimeSpan scheduledTC           = default(TimeSpan),
     Guid mediaGuid                 = default(Guid),
     string eventName               = "",
     DateTime startTime             = default(DateTime),
     TimeSpan startTC               = default(TimeSpan),
     TimeSpan?requestedStartTime    = null,
     TimeSpan transitionTime        = default(TimeSpan),
     TimeSpan transitionPauseTime   = default(TimeSpan),
     TTransitionType transitionType = TTransitionType.Cut,
     TEasing transitionEasing       = TEasing.Linear,
     double?audioVolume             = null,
     ulong idProgramme              = 0,
     string idAux     = "",
     bool isEnabled   = true,
     bool isHold      = false,
     bool isLoop      = false,
     bool isCGEnabled = false,
     byte crawl       = 0,
     byte logo        = 0,
     byte parental    = 0,
     AutoStartFlags autoStartFlags = AutoStartFlags.None,
     string command = null,
     IDictionary <string, string> fields = null,
     TemplateMethod method = TemplateMethod.Add,
     int templateLayer     = -1
     )
 {
     return(Query <Event>(parameters: new object[] { idRundownEvent, idEventBinding, videoLayer, eventType, startType, playState, scheduledTime, duration, scheduledDelay, scheduledTC, mediaGuid, eventName,
                                                     startTime, startTC, requestedStartTime, transitionTime, transitionPauseTime, transitionType, transitionEasing, audioVolume, idProgramme, idAux, isEnabled, isHold, isLoop, isCGEnabled,
                                                     crawl, logo, parental, autoStartFlags, command, fields, method, templateLayer }));
 }
        public bool Execute(string command)
        {
            var channel = _casparChannel;

            if (string.IsNullOrWhiteSpace(command) || !CheckConnected(channel))
            {
                return(false);
            }
            Match match = RegexMixerFill.Match(command);

            if (match.Success)
            {
                VideoLayer layer    = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                float      x        = float.Parse(match.Groups["x"].Value, CultureInfo.InvariantCulture);
                float      y        = float.Parse(match.Groups["y"].Value, CultureInfo.InvariantCulture);
                float      sx       = float.Parse(match.Groups["sx"].Value, CultureInfo.InvariantCulture);
                float      sy       = float.Parse(match.Groups["sy"].Value, CultureInfo.InvariantCulture);
                int        duration = string.IsNullOrWhiteSpace(match.Groups["duration"].Value)
                    ? 0
                    : int.Parse(match.Groups["duration"].Value);
                TEasing easing = match.Groups["easing"].Success
                    ? (TEasing)Enum.Parse(typeof(TEasing), match.Groups["easing"].Value, true)
                    : TEasing.Linear;
                channel.Fill((int)layer, x, y, sx, sy, duration, (Easing)easing);
                return(true);
            }
            match = RegexMixerClip.Match(command);
            if (match.Success)
            {
                VideoLayer layer    = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                float      x        = float.Parse(match.Groups["x"].Value, CultureInfo.InvariantCulture);
                float      y        = float.Parse(match.Groups["y"].Value, CultureInfo.InvariantCulture);
                float      sx       = float.Parse(match.Groups["sx"].Value, CultureInfo.InvariantCulture);
                float      sy       = float.Parse(match.Groups["sy"].Value, CultureInfo.InvariantCulture);
                int        duration = string.IsNullOrWhiteSpace(match.Groups["duration"].Value)
                    ? 0
                    : int.Parse(match.Groups["duration"].Value);
                TEasing easing = match.Groups["easing"].Success
                    ? (TEasing)Enum.Parse(typeof(TEasing), match.Groups["easing"].Value, true)
                    : TEasing.Linear;
                channel.Clip((int)layer, x, y, sx, sy, duration, (Easing)easing);
                return(true);
            }
            match = RegexMixerClear.Match(command);
            if (match.Success)
            {
                VideoLayer layer = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                channel.ClearMixer((int)layer);
                return(true);
            }
            match = RegexPlay.Match(command);
            if (match.Success)
            {
                VideoLayer layer = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                string     file  = match.Groups["file"].Value;
                CasparItem item  = new CasparItem((int)layer, file);
                Capture    transitionTypeCapture     = match.Groups["transition_type"];
                Capture    transitionDurationCapture = match.Groups["transition_duration"];
                Capture    transitionEasingCapture   = match.Groups["easing"];
                if (int.TryParse(transitionDurationCapture.Value, out var transitionDuration) &&
                    Enum.TryParse(transitionTypeCapture.Value, true, out TransitionType transitionType))
                {
                    item.Transition.Type     = transitionType;
                    item.Transition.Duration = transitionDuration;
                    if (Enum.TryParse(transitionEasingCapture.Value, true, out Easing easing))
                    {
                        item.Transition.Easing = easing;
                    }
                }
                channel.LoadBG(item);
                channel.Play(item.VideoLayer);
                return(true);
            }
            match = RegexCg.Match(command);
            if (match.Success)
            {
                VideoLayer layer = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                if (Enum.TryParse(match.Groups["method"].Value, true, out TemplateMethod methodEnum))
                {
                    if (methodEnum == TemplateMethod.Clear)
                    {
                        channel.CG.Clear((int)layer);
                        return(true);
                    }
                    var matchWithCgLayer = RegexCgWithLayer.Match(command);
                    if (!matchWithCgLayer.Success || !int.TryParse(matchWithCgLayer.Groups["cg_layer"].Value, out var cgLayer))
                    {
                        return(false);
                    }
                    switch (methodEnum)
                    {
                    case TemplateMethod.Play:
                        channel.CG.Play((int)layer, cgLayer);
                        return(true);

                    case TemplateMethod.Next:
                        channel.CG.Next((int)layer, cgLayer);
                        return(true);

                    case TemplateMethod.Stop:
                        channel.CG.Stop((int)layer, cgLayer);
                        return(true);

                    case TemplateMethod.Remove:
                        channel.CG.Remove((int)layer, cgLayer);
                        return(true);

                    case TemplateMethod.Add:
                        var matchAdd = RegexCgAdd.Match(command);
                        if (!matchAdd.Success)
                        {
                            return(false);
                        }
                        var file = matchAdd.Groups["file"].Value;
                        if (string.IsNullOrWhiteSpace(file))
                        {
                            return(false);
                        }
                        int.TryParse(matchAdd.Groups["play_on_load"].Value, out var playOnLoadAsInt);
                        channel.CG.Add((int)layer, cgLayer, file, playOnLoadAsInt == 1,
                                       matchAdd.Groups["data"].Value);
                        return(true);

                    case TemplateMethod.Invoke:
                        var matchInvoke = RegexCgInvoke.Match(command);
                        if (!matchInvoke.Success)
                        {
                            return(false);
                        }
                        var cgMethod = matchInvoke.Groups["cg_method"].Value;
                        if (string.IsNullOrWhiteSpace(cgMethod))
                        {
                            return(false);
                        }
                        channel.CG.Invoke((int)layer, cgLayer, cgMethod);
                        return(true);

                    case TemplateMethod.Update:
                        var matchUpdate = RegexCgUpdate.Match(command);
                        if (!matchUpdate.Success)
                        {
                            return(false);
                        }
                        var data = matchUpdate.Groups["data"].Value;
                        if (string.IsNullOrWhiteSpace(data))
                        {
                            return(false);
                        }
                        channel.CG.Update((int)layer, cgLayer, data);
                        return(true);
                    }
                }
            }
            return(false);
        }
        public bool Execute(string command)
        {
            var channel = _casparChannel;

            if (string.IsNullOrWhiteSpace(command) || !CheckConnected(channel))
            {
                return(false);
            }
            Match match = EventExtensions.RegexMixerFill.Match(command);

            if (match.Success)
            {
                VideoLayer layer    = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                float      x        = float.Parse(match.Groups["x"].Value, CultureInfo.InvariantCulture);
                float      y        = float.Parse(match.Groups["y"].Value, CultureInfo.InvariantCulture);
                float      sx       = float.Parse(match.Groups["sx"].Value, CultureInfo.InvariantCulture);
                float      sy       = float.Parse(match.Groups["sy"].Value, CultureInfo.InvariantCulture);
                int        duration = string.IsNullOrWhiteSpace(match.Groups["duration"].Value) ? 0 : int.Parse(match.Groups["duration"].Value);
                TEasing    easing   = match.Groups["easing"].Success ? (TEasing)Enum.Parse(typeof(TEasing), match.Groups["easing"].Value, true) : TEasing.Linear;
                channel.Fill((int)layer, x, y, sx, sy, duration, (Easing)easing);
                return(true);
            }
            match = EventExtensions.RegexMixerClip.Match(command);
            if (match.Success)
            {
                VideoLayer layer    = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                float      x        = float.Parse(match.Groups["x"].Value, CultureInfo.InvariantCulture);
                float      y        = float.Parse(match.Groups["y"].Value, CultureInfo.InvariantCulture);
                float      sx       = float.Parse(match.Groups["sx"].Value, CultureInfo.InvariantCulture);
                float      sy       = float.Parse(match.Groups["sy"].Value, CultureInfo.InvariantCulture);
                int        duration = string.IsNullOrWhiteSpace(match.Groups["duration"].Value) ? 0 : int.Parse(match.Groups["duration"].Value);
                TEasing    easing   = match.Groups["easing"].Success ? (TEasing)Enum.Parse(typeof(TEasing), match.Groups["easing"].Value, true) : TEasing.Linear;
                channel.Clip((int)layer, x, y, sx, sy, duration, (Easing)easing);
                return(true);
            }
            match = EventExtensions.RegexClearMixer.Match(command);
            if (match.Success)
            {
                VideoLayer layer = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                channel.ClearMixer((int)layer);
                return(true);
            }
            match = EventExtensions.RegexPlay.Match(command);
            if (match.Success)
            {
                VideoLayer     layer = (VideoLayer)Enum.Parse(typeof(VideoLayer), match.Groups["layer"].Value, true);
                string         file  = match.Groups["file"].Value;
                CasparItem     item  = new CasparItem((int)layer, file);
                Capture        transitionTypeCapture     = match.Groups["transition_type"];
                Capture        transitionDurationCapture = match.Groups["transition_duration"];
                Capture        transitionEasingCapture   = match.Groups["easing"];
                int            transitionDuration;
                TransitionType transitionType;
                if (int.TryParse(transitionDurationCapture.Value, out transitionDuration) && Enum.TryParse(transitionTypeCapture.Value, true, out transitionType))
                {
                    item.Transition.Type     = transitionType;
                    item.Transition.Duration = transitionDuration;
                    Easing easing;
                    if (Enum.TryParse(transitionEasingCapture.Value, true, out easing))
                    {
                        item.Transition.Easing = easing;
                    }
                }
                channel.LoadBG(item);
                channel.Play(item.VideoLayer);
                return(true);
            }
            return(false);
        }
示例#4
0
        internal Event(
            Engine engine,
            UInt64 idRundownEvent,
            UInt64 idEventBinding,
            VideoLayer videoLayer,
            TEventType eventType,
            TStartType startType,
            TPlayState playState,
            DateTime scheduledTime,
            TimeSpan duration,
            TimeSpan scheduledDelay,
            TimeSpan scheduledTC,
            Guid mediaGuid,
            string eventName,
            DateTime startTime,
            TimeSpan startTC,
            TimeSpan?requestedStartTime,
            TimeSpan transitionTime,
            TimeSpan transitionPauseTime,
            TTransitionType transitionType,
            TEasing transitionEasing,
            decimal?audioVolume,
            UInt64 idProgramme,
            string idAux,
            bool isEnabled,
            bool isHold,
            bool isLoop,
            AutoStartFlags autoStartFlags,
            bool isCGEnabled,
            byte crawl,
            byte logo,
            byte parental)
        {
            _engine              = engine;
            _id                  = idRundownEvent;
            _idEventBinding      = idEventBinding;
            _layer               = videoLayer;
            _eventType           = eventType;
            _startType           = startType;
            _playState           = playState == TPlayState.Paused ? TPlayState.Scheduled: playState == TPlayState.Fading ? TPlayState.Played : playState;
            _scheduledTime       = scheduledTime;
            _duration            = duration;
            _scheduledDelay      = scheduledDelay;
            _scheduledTc         = scheduledTC;
            _eventName           = eventName;
            _startTime           = startTime;
            _startTc             = startTC;
            _requestedStartTime  = requestedStartTime;
            _transitionTime      = transitionTime;
            _transitionPauseTime = transitionPauseTime;
            _transitionType      = transitionType;
            _transitionEasing    = transitionEasing;
            _audioVolume         = audioVolume;
            _idProgramme         = idProgramme;
            _idAux               = idAux;
            _isEnabled           = isEnabled;
            _isHold              = isHold;
            _isLoop              = isLoop;
            _isCGEnabled         = isCGEnabled;
            _crawl               = crawl;
            _logo                = logo;
            _parental            = parental;
            _autoStartFlags      = autoStartFlags;
            _setMedia(null, mediaGuid);
            _subEvents = new Lazy <SynchronizedCollection <Event> >(() =>
            {
                var result = new SynchronizedCollection <Event>();
                if (_id != 0)
                {
                    var seList = Engine.DbReadSubEvents(this);
                    foreach (Event e in seList)
                    {
                        e.Parent = this;
                        result.Add(e);
                    }
                }
                return(result);
            });

            _next = new Lazy <Event>(() =>
            {
                var next = (Event)Engine.DbReadNext(this);
                if (next != null)
                {
                    next.Prior = this;
                }
                return(next);
            });
            _prior = new Lazy <Event>(() =>
            {
                Event prior = null;
                if (startType == TStartType.After && _idEventBinding > 0)
                {
                    prior = (Event)Engine.DbReadEvent(_idEventBinding);
                }
                return(prior);
            });

            _parent = new Lazy <Event>(() =>
            {
                if ((startType == TStartType.WithParent || startType == TStartType.WithParentFromEnd) && _idEventBinding > 0)
                {
                    return((Event)Engine.DbReadEvent(_idEventBinding));
                }
                return(null);
            });
        }
示例#5
0
        internal Event(
            Engine engine,
            UInt64 idRundownEvent,
            UInt64 idEventBinding,
            VideoLayer videoLayer,
            TEventType eventType,
            TStartType startType,
            TPlayState playState,
            DateTime scheduledTime,
            TimeSpan duration,
            TimeSpan scheduledDelay,
            TimeSpan scheduledTC,
            Guid mediaGuid,
            string eventName,
            DateTime startTime,
            TimeSpan startTC,
            TimeSpan?requestedStartTime,
            TimeSpan transitionTime,
            TimeSpan transitionPauseTime,
            TTransitionType transitionType,
            TEasing transitionEasing,
            double?audioVolume,
            UInt64 idProgramme,
            string idAux,
            bool isEnabled,
            bool isHold,
            bool isLoop,
            AutoStartFlags autoStartFlags,
            bool isCGEnabled,
            byte crawl,
            byte logo,
            byte parental,
            short routerPort,
            RecordingInfo recordingInfo)
        {
            _engine              = engine;
            _rundownSync         = engine.RundownSync;
            Id                   = idRundownEvent;
            IdEventBinding       = idEventBinding;
            _layer               = videoLayer;
            _eventType           = eventType;
            _startType           = startType;
            _playState           = playState == TPlayState.Paused ? TPlayState.Scheduled: playState == TPlayState.Fading ? TPlayState.Played : playState;
            _scheduledTime       = scheduledTime;
            _duration            = duration;
            _scheduledDelay      = scheduledDelay;
            _scheduledTc         = scheduledTC;
            _eventName           = eventName;
            _startTime           = startTime;
            _startTc             = startTC;
            _requestedStartTime  = requestedStartTime;
            _transitionTime      = transitionTime;
            _transitionPauseTime = transitionPauseTime;
            _transitionType      = transitionType;
            _transitionEasing    = transitionEasing;
            _audioVolume         = audioVolume;
            _idProgramme         = idProgramme;
            _idAux               = idAux;
            _isEnabled           = isEnabled;
            _isHold              = isHold;
            _isLoop              = isLoop;
            _isCGEnabled         = isCGEnabled;
            _crawl               = crawl;
            _logo                = logo;
            _parental            = parental;
            _autoStartFlags      = autoStartFlags;
            _mediaGuid           = mediaGuid;
            _subEvents           = new Lazy <SynchronizedCollection <Event> >(() =>
            {
                var result = new SynchronizedCollection <Event>();
                if (Id == 0)
                {
                    return(result);
                }
                var seList = DatabaseProvider.Database.ReadSubEvents(_engine, this);
                foreach (Event e in seList)
                {
                    e.Parent = this;
                    result.Add(e);
                }
                return(result);
            });

            _next = new Lazy <Event>(() =>
            {
                var next = (Event)DatabaseProvider.Database.ReadNext(_engine, this);
                if (next != null)
                {
                    next.Prior = this;
                }
                return(next);
            });

            _prior = new Lazy <Event>(() =>
            {
                Event prior = null;
                if (startType == TStartType.After && IdEventBinding > 0)
                {
                    prior = (Event)DatabaseProvider.Database.ReadEvent(_engine, IdEventBinding);
                }
                if (prior != null)
                {
                    prior.Next = this;
                }
                return(prior);
            });

            _parent = new Lazy <Event>(() =>
            {
                if ((startType == TStartType.WithParent || startType == TStartType.WithParentFromEnd) && IdEventBinding > 0)
                {
                    return((Event)DatabaseProvider.Database.ReadEvent(_engine, IdEventBinding));
                }
                return(null);
            });

            _rights = new Lazy <List <IAclRight> >(() =>
            {
                var rights = DatabaseProvider.Database.ReadEventAclList <EventAclRight>(this, _engine.AuthenticationService as IAuthenticationServicePersitency);
                rights.ForEach(r => ((EventAclRight)r).Saved += AclEvent_Saved);
                return(rights);
            });
            _routerPort    = routerPort;
            _recordingInfo = recordingInfo;

            FieldLengths = DatabaseProvider.Database.EventFieldLengths;
        }