Пример #1
0
        public void Reinitialize()
        {
            //TODO: Change to runner extension
            Runner = BehaviorTreeFile.LoadFromJSON(this);

            if (spliceNewIntoTree)
            {
                SpliceIntoRunner();
            }

            TreeElementUtility.TreeToList(Runner, treeList);

            var treeQuery = treeList.AsEnumerable();

            TreeSubject = new Subject <BehaviorTreeElement>();
            TreeSubject.Subscribe(xr =>
            {
                var logEntry = new BehaviorLogEntry(
                    loggerName: BehaviorLogger.Name,
                    logType: LogType.Log,
                    timestamp: DateTime.Now,
                    message: "Ticked!",
                    behaviorID: xr.ID,
                    newState: xr.CurrentState,
                    ticknum: xr.NumberOfTicksReceived.Value,
                    context: this,
                    state: xr);
                BehaviorLogger.Raw(logEntry);
                Debug.Log("xr debug initialize");
            }).AddTo(this);

            initialized = true;
        }
Пример #2
0
 public static BitmapImage CreateImage([CanBeNull] byte[] bytes)
 {
     if (bytes == null)
     {
         return(null);
     }
     try
     {
         using (var ms = new MemoryStream(bytes))
         {
             var bitmap = new BitmapImage();
             bitmap.BeginInit();
             bitmap.CacheOption   = BitmapCacheOption.OnLoad;
             bitmap.CreateOptions = BitmapCreateOptions.None;
             bitmap.StreamSource  = ms;
             bitmap.EndInit();
             bitmap.Freeze();
             return(bitmap);
         }
     }
     catch (Exception ex)
     {
         BehaviorLogger.Log("Image util",
                            "Fail to load image: " + Environment.NewLine + ex);
         return(null);
     }
 }
Пример #3
0
        private static void InitializeSubsystemsAfterSettingsLoaded()
        {
            // Logger subsystem initialize
            BehaviorLogger.Initialize();

            // set parameters for accessing twitter.
            Networking.Initialize();

            // load key assigns
            KeyAssignManager.Initialize();

            // load cache manager
            CacheStore.Initialize();
        }
        public void Reinitialize()
        {
            //TODO: Change to runner extension
            Runner = BehaviorTreeFile.LoadFromJSON(this);

            if (spliceNewIntoTree)
            {
                SpliceIntoRunner();
            }

            List <BehaviorTreeElement> treeList = new List <BehaviorTreeElement>();

            TreeElementUtility.TreeToList(Runner, treeList);

            var treeQuery = from el in treeList
                            select el;

            TreeStream =
                treeQuery
                .ToObservable()
                .Do(xr =>
            {
                xr.ObserveEveryValueChanged(x => x.NumberOfTicksReceived)
                .Do(x =>
                {
                    var logEntry = new BehaviorLogEntry(
                        loggerName: BehaviorLogger.Name,
                        logType: LogType.Log,
                        timestamp: DateTime.Now,
                        message: "Ticked!",
                        behaviorID: xr.ID,
                        newState: xr.CurrentState,
                        ticknum: xr.NumberOfTicksReceived.Value,
                        context: this,
                        state: xr);
                    BehaviorLogger.Raw(logEntry);
                })

                .Subscribe()
                .AddTo(this);
            });

            TreeStream.Subscribe().AddTo(this);

            initialized = true;
        }
        private void AddTrackKeywordCore(string[] tracks)
        {
            lock (this._trackLocker)
            {
                foreach (var track in tracks)
                {
                    if (this._trackReferenceCount.ContainsKey(track))
                    {
                        this._trackReferenceCount[track]++;
                        return;
                    }
                    BehaviorLogger.Log("TRACK", "add query: " + track);
                    System.Diagnostics.Debug.WriteLine("◎ track add: " + track);
                    this._trackReferenceCount[track] = 1;
                }

                var trackList = new List <string>(tracks);

                while (trackList.Count > 0)
                {
                    var tracker = this._receiveManager.GetSuitableKeywordTracker();
                    if (tracker == null)
                    {
                        lock (this._danglingLocker)
                        {
                            this._danglingKeywords.AddRange(trackList);
                        }
                        this.NotifyDangling();
                        return;
                    }
                    var acceptableCount = UserStreamsReceiver.MaxTrackingKeywordCounts - tracker.TrackKeywords.Count();
                    var acceptables     = trackList.Take(acceptableCount).ToArray();
                    acceptables.ForEach(track => this._trackResolver[track] = tracker.UserId);
                    tracker.TrackKeywords = tracker.TrackKeywords.Concat(acceptables).ToArray();
                    trackList             = trackList.Skip(acceptableCount).ToList();
                }
            }
        }
 private void RemoveTrackKeywordCore(string track)
 {
     lock (this._trackLocker)
     {
         if (!this._trackReferenceCount.ContainsKey(track) || --this._trackReferenceCount[track] > 0)
         {
             return;
         }
         this._trackReferenceCount.Remove(track);
         if (this._trackResolver.ContainsKey(track))
         {
             BehaviorLogger.Log("TRACK", "remove query: " + track);
             var id = this._trackResolver[track];
             this._trackResolver.Remove(track);
             var tracker = this._receiveManager.GetKeywordTrackerFromId(id);
             tracker.TrackKeywords = tracker.TrackKeywords.Except(new[] { track });
             return;
         }
     }
     lock (this._danglingLocker)
     {
         this._danglingKeywords.Remove(track);
     }
 }
Пример #7
0
 private void Log(string log)
 {
     Debug.WriteLine("*USERSTREAMS* " + _account.UnreliableScreenName + ": " + log);
     BehaviorLogger.Log("STRM", _account.UnreliableScreenName + ": " + log);
 }
Пример #8
0
        private IStreamHandler InitializeHandler()
        {
            var handler = StreamHandler.Create(StatusInbox.Enqueue,
                                               ex =>
            {
                BehaviorLogger.Log("U/S", _account.UnreliableScreenName + ":" + ex.ToString());
                BackstageModel.RegisterEvent(new StreamDecodeFailedEvent(_account.UnreliableScreenName, ex));
            });

            handler.AddHandler <StreamDelete>(d => StatusInbox.EnqueueRemoval(d.Id));
            handler.AddHandler <StreamDisconnect>(
                d => BackstageModel.RegisterEvent(new UserStreamsDisconnectedEvent(_account, d.Reason)));
            handler.AddHandler <StreamLimit>(
                limit => NotificationService.NotifyLimitationInfoGot(_account, (int)limit.UndeliveredCount));
            handler.AddHandler <StreamStatusEvent>(s =>
            {
                switch (s.Event)
                {
                case StatusEvents.Unknown:
                    BackstageModel.RegisterEvent(new UnknownEvent(s.Source, s.RawEvent));
                    break;

                case StatusEvents.Favorite:
                    NotificationService.NotifyFavorited(s.Source, s.TargetObject);
                    break;

                case StatusEvents.Unfavorite:
                    NotificationService.NotifyUnfavorited(s.Source, s.TargetObject);
                    break;

                case StatusEvents.FavoriteRetweet:
                    NotificationService.NotifyFavorited(s.Source, s.TargetObject);
                    break;

                case StatusEvents.RetweetRetweet:
                    NotificationService.NotifyRetweeted(s.Source, s.TargetObject.RetweetedOriginal, s.TargetObject);
                    break;

                case StatusEvents.Quote:
                    // do nothing
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                if (s.TargetObject != null)
                {
                    StatusInbox.Enqueue(s.TargetObject);
                }
            });
            handler.AddHandler <StreamUserEvent>(async item =>
            {
                var active  = item.Source.Id == _account.Id;
                var passive = item.Target.Id == _account.Id;
                var reldata = _account.RelationData;
                switch (item.Event)
                {
                case UserEvents.Unknown:
                    BackstageModel.RegisterEvent(new UnknownEvent(item.Source, item.RawEvent));
                    break;

                case UserEvents.Follow:
                    if (active)
                    {
                        await reldata.Followings.SetAsync(item.Target.Id, true).ConfigureAwait(false);
                    }
                    if (passive)
                    {
                        await reldata.Followers.SetAsync(item.Source.Id, true).ConfigureAwait(false);
                    }
                    NotificationService.NotifyFollowed(item.Source, item.Target);
                    break;

                case UserEvents.Unfollow:
                    if (active)
                    {
                        await reldata.Followings.SetAsync(item.Target.Id, false).ConfigureAwait(false);
                    }
                    if (passive)
                    {
                        await reldata.Followers.SetAsync(item.Source.Id, false).ConfigureAwait(false);
                    }
                    NotificationService.NotifyUnfollowed(item.Source, item.Target);
                    break;

                case UserEvents.Block:
                    if (active)
                    {
                        await reldata.Followings.SetAsync(item.Target.Id, false).ConfigureAwait(false);
                        await reldata.Followers.SetAsync(item.Target.Id, false).ConfigureAwait(false);
                        await reldata.Blockings.SetAsync(item.Target.Id, true).ConfigureAwait(false);
                    }
                    if (passive)
                    {
                        await reldata.Followers.SetAsync(item.Target.Id, false).ConfigureAwait(false);
                    }
                    NotificationService.NotifyBlocked(item.Source, item.Target);
                    break;

                case UserEvents.Unblock:
                    if (active)
                    {
                        await reldata.Blockings.SetAsync(item.Target.Id, false).ConfigureAwait(false);
                    }
                    NotificationService.NotifyUnblocked(item.Source, item.Target);
                    break;

                case UserEvents.UserUpdate:
                    NotificationService.NotifyUserUpdated(item.Source);
                    break;

                case UserEvents.Mute:
                    if (active)
                    {
                        await reldata.Mutes.SetAsync(item.Target.Id, true).ConfigureAwait(false);
                    }
                    NotificationService.NotifyBlocked(item.Source, item.Target);
                    break;

                case UserEvents.UnMute:
                    if (active)
                    {
                        await reldata.Mutes.SetAsync(item.Target.Id, false).ConfigureAwait(false);
                    }
                    NotificationService.NotifyUnblocked(item.Source, item.Target);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            });
            return(handler);
        }