public async Task Get()
        {
            var random = new Random();
            var bytes = new byte[128];
            random.NextBytes(bytes);
            var fileName = Guid.NewGuid().ToString();
            var contentType = "image/jpeg";

            await this.container.Save(fileName, bytes, contentType);

            var streamer = new Streamer(this.container);
            using (var stream = await streamer.Stream(fileName))
            {
                var ms = stream as MemoryStream;
                Assert.IsNotNull(ms);
                Assert.AreEqual(bytes, ms.ToArray());
            }
            Assert.AreEqual(contentType, streamer.MimeType);
        }
Beispiel #2
0
 public void UpdateDataPoint(Streamer streamer)
 {
     _denStream.Update(streamer);
 }
Beispiel #3
0
        public void SerializeCachedObjectUsingProtocolBuffers()
        {
            ClientSideTypeDescription.RegisterType(typeof(TradeLike));
            Random randGen = new Random();


            //to byte array
            for (int i = 0; i < 5000; i++)
            {
                TradeLike    obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), 1);
                CachedObject packed = CachedObject.Pack(obj).Metadata;

                byte[]       data     = SerializationHelper.ObjectToBytes(packed, SerializationMode.ProtocolBuffers, null);
                CachedObject reloaded =
                    SerializationHelper.ObjectFromBytes <CachedObject>(data, SerializationMode.ProtocolBuffers, false);


                Assert.AreEqual(reloaded.IndexKeys[2], packed.IndexKeys[2]);

                Console.WriteLine(reloaded);
            }


            //to stream
            MemoryStream        stream = new MemoryStream();
            List <CachedObject> items  = new List <CachedObject>();

            for (int i = 0; i < 1000; i++)
            {
                TradeLike    obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), randGen.Next(1000));
                CachedObject packed = CachedObject.Pack(obj).Metadata;
                items.Add(packed);
            }

            List <CachedObject> itemsReloaded = new List <CachedObject>();

            Streamer.ToStreamGeneric(stream, items);
            stream.Seek(0, SeekOrigin.Begin);
            ManualResetEvent evt = new ManualResetEvent(false);

            Streamer.FromStream(stream,
                                delegate(CachedObject item, int i, int totalItems)
            {
                itemsReloaded.Add(item);
                if (i == totalItems)
                {
                    evt.Set();
                }
            },
                                delegate
            {
                /* ignore exceptions */
            });

            evt.WaitOne();


            for (int i = 0; i < 1000; i++)
            {
                Assert.AreEqual(itemsReloaded[i].IndexKeys[2], items[i].IndexKeys[2]);
            }
        }
Beispiel #4
0
 public void SendManyGeneric <TItemType>(ICollection <TItemType> items) where TItemType : class
 {
     Streamer.ToStreamGeneric(_stream, items);
     _stream.Seek(0, SeekOrigin.Begin);
     _dataReceived.Set();
 }
Beispiel #5
0
        /// <summary>
        /// On window loaded - Start  Foosbot Application and Threads
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void OnWindowLoaded(object sender, RoutedEventArgs e)
        {
            try
            {
                //get operation mode from configuration file
                _isDemoMode = Configuration.Attributes.GetValue <bool>(KEY_IS_DEMO_MODE);

                //Set canvas background as green image
                _guiImage.Background = System.Windows.Media.Brushes.Green;

                //Init Gui Log
                AutoscrollCheckbox = true;
                Log.InitializeGuiLog(UpdateLog);
                string startMessage = Configuration.Attributes.GetValue <string>("startMessage");
                Log.Common.Debug(startMessage);

                //Start Diagnostics - Processor and Memory Usage
                StartDiagnostics();

                //Call the streamer to get capture from camera
                if (!_isDemoMode)
                {
                    _streamer = new RealStreamer(UpdateStatistics);
                }
                else
                {
                    _streamer = new DemoStreamer(UpdateStatistics);
                }

                //Initialize Markups to Show on Screen
                InitializeMarkUps();

                //Start streamer after marks initialized
                _streamer.Start();

                //Call ImageProcessingUnit
                _frameReceiver = new UIFrameObserver(_streamer);
                _frameReceiver.Start();
                if (!_isDemoMode)
                {
                    _ipu = new ImageProcessingUnit(_streamer, UpdateMarkupCircle, UpdateStatistics);
                }
                else
                {
                    _ipu = new DemoImageProcessingUnit(_streamer as DemoStreamer, UpdateMarkupCircle, UpdateStatistics);
                }
                _ipu.Start();

                //Show frames in diferent thread
                _imageBrush = new ImageBrush();
                BackgroundWorker worker = new BackgroundWorker();
                worker.DoWork += (s, z) =>
                {
                    ShowVideoStream();
                };
                worker.RunWorkerAsync();

                VectorCallculationUnit vectorCalcullationUnit = new VectorCallculationUnit(_ipu.BallLocationPublisher, UpdateMarkupLine, UpdateMarkupCircle);
                vectorCalcullationUnit.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Application can not start. Reason: " + ex.Message);
                Close();
            }
        }
Beispiel #6
0
        public Streamer CreateStreamerLogic(Streamer body)
        {
            Streamer returnStreamer;

            using (var context = new MainDataContext()) {
                Streamer streamer = context.Streamers.FirstOrDefault(item => item.streamerId == body.streamerId);

                if (streamer == null)
                {
                    // if streamer does not exist in database and want to add
                    _logger.Info("Adding new streamer...");

                    string etag = "";
                    if (GlobalConfig.GetGlobalConfig("contentRootPath") != null)
                    {
                        CreateFolder($"{GlobalConfig.GetGlobalConfig("contentRootPath")}/streamers/{body.streamerId}/");
                        if (!string.IsNullOrEmpty(body.thumbnailLocation))
                        {
                            etag = DownloadHelpers.DownloadFile(body.thumbnailLocation,
                                                                $"{GlobalConfig.GetGlobalConfig("contentRootPath")}/streamers/{body.streamerId}/thumbnail.png");
                        }
                    }


                    streamer = new Streamer {
                        streamerId        = body.streamerId,
                        displayName       = body.displayName,
                        username          = body.username,
                        isLive            = body.isLive ?? false,
                        quality           = body.quality == "{\"resolution\":0,\"fps\":0}" ? null : body.quality,
                        getLive           = body.getLive ?? false,
                        thumbnailLocation = $"streamers/{body.streamerId}/thumbnail.png",
                        thumbnailETag     = etag
                    };

                    context.Streamers.Add(streamer);
                    returnStreamer = streamer;
                } /*else if (streamer != null) {
                   * // if streamer exists then update
                   * Console.WriteLine("Updating streamer...");
                   * streamer.streamerId = body.streamerId;
                   * streamer.displayName = body.displayName;
                   * streamer.username = body.username;
                   * streamer.description = body.description;
                   * streamer.viewCount = body.viewCount;
                   * streamer.thumbnailLocation = $"streamers/{body.streamerId}/thumbnail.png";
                   * returnStreamer = streamer;
                   *
                   * IList<Parameter> headers = downloadHelpers.GetHeaders(body.thumbnailLocation);
                   * for (var x = 0; x < headers.Count; x++) {
                   *    if (headers[x].Name == "ETag") {
                   *        var etag = headers[x].Value;
                   *        if (etag != null) {
                   *            if (streamer.thumbnailETag != etag.ToString().Replace("\"", "")) {
                   *                if (contentRootPath != null)
                   *                    Console.WriteLine("Detected new thumbnail image, downloading...");
                   *                streamer.thumbnailETag = downloadHelpers.DownloadFile(body.thumbnailLocation,
                   *                    $"{contentRootPath.value}/streamers/{body.streamerId}/thumbnail.png");
                   *            }
                   *        }
                   *    }
                   * }
                   * }*/
                else
                {
                    //something strange has happened
                    returnStreamer = new Streamer();
                }

                //if (isNew) {
                //StartupJobs startupJobs = new StartupJobs();
                List <Streamer> streamers = new List <Streamer> {
                    streamer
                };                                                        //lazy
                JobHelpers.NormalJob <CheckForStreamerLiveStatusJob>("CreateStreamerUpdateLiveStatusJob", "CreateStreamerUpdateLiveStatusTrigger", QuartzSchedulers.PrimaryScheduler());
                IJobDetail job = JobBuilder.Create <UpdateStreamerDetailsJob>()
                                 .WithIdentity("UpdateStreamerDetailsJob")
                                 .Build();

                job.JobDataMap.Put("listOfStreamers", streamers);

                var        schedulerFactory = new StdSchedulerFactory(QuartzSchedulers.PrimaryScheduler());
                IScheduler scheduler        = schedulerFactory.GetScheduler().Result;
                scheduler.Start();

                ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
                                         .WithIdentity("UpdateStreamerDetailsTrigger")
                                         .StartNow()
                                         .Build();

                scheduler.ScheduleJob(job, trigger);
                //}

                context.SaveChanges();
            }

            return(returnStreamer);
        }
Beispiel #7
0
        private Card RandomCard(Vector2 position, bool front, int playerID)
        {
            Card c = null;

            if (Globals.r.Next(4) == 0)
            {
                int cardsCount = 31;
                int rn         = Globals.r.Next(cardsCount);
                switch (rn)
                {
                case 0:
                    c = new Actor(position, front, playerID);
                    break;

                case 1:
                    c = new Artist(position, front, playerID);
                    break;

                case 2:
                    c = new Astrophysicist(position, front, playerID);
                    break;

                case 3:
                    c = new Babysitter(position, front, playerID);
                    break;

                case 4:
                    c = new BabysitterU(position, front, playerID);
                    break;

                case 5:
                    c = new BusDriver(position, front, playerID);
                    break;

                case 6:
                    c = new Conman(position, front, playerID);
                    break;

                case 7:
                    c = new DeliveryPerson(position, front, playerID);
                    break;

                case 8:
                    c = new DrugDealer(position, front, playerID);
                    break;

                case 9:
                    c = new FastFoodEmployee(position, front, playerID);
                    break;

                case 10:
                    c = new Hacker(position, front, playerID);
                    break;

                case 11:
                    c = new Hitman(position, front, playerID);
                    break;

                case 12:
                    c = new HumanTrafficker(position, front, playerID);
                    break;

                case 13:
                    c = new IndieGameDev(position, front, playerID);
                    break;

                case 14:
                    c = new Influencer(position, front, playerID);
                    break;

                case 15:
                    c = new InstaModel(position, front, playerID);
                    break;

                case 16:
                    c = new InternDev(position, front, playerID);
                    break;

                case 17:
                    c = new JuniorDev(position, front, playerID);
                    break;

                case 18:
                    c = new Musician(position, front, playerID);
                    break;

                case 19:
                    c = new OnlyFans(position, front, playerID);
                    break;

                case 20:
                    c = new Referee(position, front, playerID);
                    break;

                case 21:
                    c = new RiceFarmer(position, front, playerID);
                    break;

                case 22:
                    c = new Santa(position, front, playerID);
                    break;

                case 23:
                    c = new Shelfstacker(position, front, playerID);
                    break;

                case 24:
                    c = new Shoplifter(position, front, playerID);
                    break;

                case 25:
                    c = new Sporter(position, front, playerID);
                    break;

                case 27:
                    c = new Streamer(position, front, playerID);
                    break;

                case 28:
                    c = new SugarDaddy(position, front, playerID);
                    break;

                case 29:
                    c = new TaxiDriver(position, front, playerID);
                    break;

                case 30:
                    c = new Writer(position, front, playerID);
                    break;

                case 26:
                    c = new YogaInstructor(position, front, playerID);
                    break;
                }
            }
            else
            {
                int cardsCount = 12;
                int rn         = Globals.r.Next(cardsCount);
                switch (rn)
                {
                case 0:
                    c = new Alcohol(position, front, playerID);
                    break;

                case 1:
                    c = new Drugs(position, front, playerID);
                    break;

                case 2:
                    c = new EatingOut(position, front, playerID);
                    break;

                case 3:
                    c = new FastFood(position, front, playerID);
                    break;

                case 4:
                    c = new Gambling(position, front, playerID);
                    break;

                case 5:
                    c = new Gaming(position, front, playerID);
                    break;

                case 6:
                    c = new Joint(position, front, playerID);
                    break;

                case 7:
                    c = new PomXML(position, front, playerID);
                    break;

                case 8:
                    c = new Shopping(position, front, playerID);
                    break;

                case 9:
                    c = new Smoking(position, front, playerID);
                    break;

                case 10:
                    c = new SocialMedia(position, front, playerID);
                    break;

                case 11:
                    c = new Streaming(position, front, playerID);
                    break;
                }
            }

            return(c);
        }
Beispiel #8
0
        //внутренний дл¤ тестировани¤
        internal TOutStream RealisePlan <TOutStream>(FramingPlan plan, Guid rootKey, string nmspc, int maxDepth, Streamer <TOutStream> streamer, Dictionary <string, object> parameters)
        {
            var frame       = plan.MakeFrame(rootKey, maxDepth, parameters);
            var filledFrame = _planFiller.FillFrame(frame);
            var stream      = streamer.StreamFilledFrames(filledFrame, nmspc);

            return(stream);
        }
    /// <summary>
    /// Splits the scene into tiles.
    /// </summary>
    void SplitScene(SceneCollection layer)
    {
        warning = "";
        splits [layer.layerNumber] = new Dictionary <string, GameObject> ();



        GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType <GameObject> ();

        FindSceneGO(layer.prefixScene, allObjects, splits [layer.layerNumber]);

        ClearSceneGO(layer);


        foreach (var item in allObjects)
        {
            if (item == null || item.transform.parent != null || !item.name.StartsWith(layer.prefixName) ||
                item.GetComponent <SceneSplitManager> () != null || item.GetComponent <SceneCollection> () != null || item.GetComponent <SceneSplitterSettings> () != null)
            {
                continue;
            }

            string splitName = layer.prefixScene + GetID(item.transform.position, layer);

            UnityEngine.SceneManagement.Scene scene = EditorSceneManager.GetSceneByName(splitName);             //EditorSceneManager.NewScene (NewSceneSetup.EmptyScene, NewSceneMode.Additive);



            if (scene.name == null)
            {
                string splitSceneName = splitName + ".unity";
                string sceneName      = layer.path + splitSceneName;

                bool contains = false;

                foreach (var nameSplit in layer.names)
                {
                    if (nameSplit == splitSceneName)
                    {
                        contains = true;
                        break;
                    }
                }

                if (!contains)
                {
                    List <string> names = new List <string> ();
                    names.AddRange(layer.names);
                    names.Add(splitSceneName);
                    layer.names = names.ToArray();

                    scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive);

                    EditorSceneManager.SaveScene(scene, sceneName);
                    loadedScenes.Add(scene);
                }
                else
                {
                    scene = EditorSceneManager.OpenScene(sceneName, OpenSceneMode.Additive);
                    loadedScenes.Add(scene);
                }
            }
        }

        allObjects = UnityEngine.Object.FindObjectsOfType <GameObject> ();

        FindSceneGO(layer.prefixScene, allObjects, splits [layer.layerNumber]);

        ClearSceneGO(layer);

        foreach (var item in allObjects)
        {
            if (item == null || item.transform.parent != null || !item.name.StartsWith(layer.prefixName) ||
                item.GetComponent <SceneSplitManager> () != null || item.GetComponent <SceneCollection> () != null || item.GetComponent <SceneSplitterSettings> () != null)
            {
                continue;
            }
            string itemId = GetID(item.transform.position, layer);

            GameObject split = null;
            if (!splits [layer.layerNumber].TryGetValue(itemId, out split))
            {
                split = new GameObject(layer.prefixScene + itemId);
                SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> ();
                sceneSplitManager.sceneName = split.name;

                sceneSplitManager.size     = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100);
                sceneSplitManager.position = GetSplitPosition(item.transform.position, layer);
                sceneSplitManager.color    = layer.color;

                splits [layer.layerNumber].Add(itemId, split);

                Vector3 splitPosId = GetSplitPositionID(item.transform.position, layer);

                if (layer.xSplitIs)
                {
                    if (splitPosId.x < layer.xLimitsx)
                    {
                        layer.xLimitsx = (int)splitPosId.x;
                    }
                    if (splitPosId.x > layer.xLimitsy)
                    {
                        layer.xLimitsy = (int)splitPosId.x;
                    }
                }
                else
                {
                    layer.xLimitsx = 0;
                    layer.xLimitsy = 0;
                }

                if (layer.ySplitIs)
                {
                    if (splitPosId.y < layer.yLimitsx)
                    {
                        layer.yLimitsx = (int)splitPosId.y;
                    }
                    if (splitPosId.y > layer.yLimitsy)
                    {
                        layer.yLimitsy = (int)splitPosId.y;
                    }
                }
                else
                {
                    layer.yLimitsx = 0;
                    layer.yLimitsy = 0;
                }

                if (layer.zSplitIs)
                {
                    if (splitPosId.z < layer.zLimitsx)
                    {
                        layer.zLimitsx = (int)splitPosId.x;
                    }
                    if (splitPosId.z > layer.zLimitsy)
                    {
                        layer.zLimitsy = (int)splitPosId.z;
                    }
                }
                else
                {
                    layer.zLimitsx = 0;
                    layer.zLimitsy = 0;
                }

                UnityEngine.SceneManagement.Scene scene = EditorSceneManager.GetSceneByName(sceneSplitManager.sceneName);



                EditorSceneManager.MoveGameObjectToScene(split, scene);
            }



            item.transform.SetParent(split.transform);
        }

        if (splits.Count == 0)
        {
            warning = "No objects to split. Check GameObject or Scene Prefix.";
        }

        foreach (var item in loadedScenes)
        {
            if (!string.IsNullOrEmpty(item.name) && GameObject.Find(item.name) == null)
            {
                GameObject        split             = new GameObject(item.name);
                SceneSplitManager sceneSplitManager = split.AddComponent <SceneSplitManager> ();
                sceneSplitManager.sceneName = split.name;

                sceneSplitManager.size = new Vector3(layer.xSize != 0 ? layer.xSize : 100, layer.ySize != 0 ? layer.ySize : 100, layer.zSize != 0 ? layer.zSize : 100);
                int posx;
                int posy;
                int posz;

                Streamer.SceneNameToPos(layer, item.name, out posx, out posy, out posz);

                posx *= layer.xSize;
                posy *= layer.ySize;
                posz *= layer.zSize;
                sceneSplitManager.position = GetSplitPosition(new Vector3(posx, posy, posz), layer);
                sceneSplitManager.color    = layer.color;

                splits [layer.layerNumber].Add(split.name.Replace(layer.prefixScene, ""), split);
                EditorSceneManager.MoveGameObjectToScene(split, item);
            }
        }
    }
Beispiel #10
0
        public Task EditUser(IUser user, string newUrl)
        {
            if (user.IsBot)
            {
                return(Task.CompletedTask);
            }

            if (string.IsNullOrWhiteSpace(newUrl))
            {
                return(Task.CompletedTask);
            }

            if (!newUrl.Contains("http"))
            {
                return(ReplyAsync("URL invalid"));
            }

            LiteCollection <Streamer> streamers = null;

            lock (dbLock)
            {
                streamers = database.GetCollection <Streamer>("streamers");
            }

            var urlState = twitch.GetTwitchUrlState(newUrl);

            if (urlState.Result != Twitch.TwitchUrlState.Ok)
            {
                return(ReplyAsync("Twitch URL invalid."));
            }


            Dictionary <string, JToken> dict = twitch.TwitchQuery(Twitch.HelixStrings.Users, newUrl).Result;

            Streamer currentStreamer = null;

            if ((currentStreamer = streamers.FindOne(x => x.Id == user.Id)) == null)
            {
                ReplyAsync("User does not exist in database");
                return(Task.CompletedTask);
            }

            currentStreamer.Name      = (string)dict["login"];
            currentStreamer.StreamUrl = "https://www.twitch.tv/" + dict["login"];
            currentStreamer.AvatarUrl = (string)dict["profile_image_url"];

            bool update = false;

            lock (dbLock)
            {
                update = streamers.Update(currentStreamer);
            }


            if (!update)
            {
                ReplyAsync("Could not add user to the database");
                return(Task.CompletedTask);
            }

            ReplyAsync($"Added {user.Mention} to the database");

            return(Task.CompletedTask);
        }
        ///<summary>これを定期的に呼んで再接続やFriendの取得をやらせる</summary>
        public async ValueTask <int> ConnectStreamers()
        {
            if (!await db.ExistThisPid().ConfigureAwait(false))
            {
                Environment.Exit(1);
            }

            int ActiveStreamers = 0;  //再接続が不要だったやつの数
            ActionBlock <UserStreamer> ConnectBlock = new ActionBlock <UserStreamer>(
                async(Streamer) =>
            {
                try
                {
                    UserStreamer.NeedConnectResult NeedConnect = Streamer.NeedConnect();
                    //初回とRevoke疑いのときだけVerifyCredentials()する
                    //プロフィールを取得したい
                    if (NeedConnect == UserStreamer.NeedConnectResult.Postponed)
                    {
                        return;
                    }
                    else if (NeedConnect == UserStreamer.NeedConnectResult.First)
                    {
                        switch (await Streamer.VerifyCredentials().ConfigureAwait(false))
                        {
                        case UserStreamer.TokenStatus.Locked:
                            Streamer.PostponeConnect(); return;

                        case UserStreamer.TokenStatus.Revoked:
                            await RevokeRetry(Streamer).ConfigureAwait(false); return;

                        case UserStreamer.TokenStatus.Failure:
                            return;

                        case UserStreamer.TokenStatus.Success:
                            RevokeRetryUserID.TryRemove(Streamer.Token.UserId, out byte gomi);
                            NeedConnect = UserStreamer.NeedConnectResult.JustNeeded;        //無理矢理接続処理に突っ込む #ウンコード
                            break;
                        }
                    }

                    //Streamに接続したりRESTだけにしたり
                    if (NeedConnect == UserStreamer.NeedConnectResult.StreamConnected)
                    {
                        if (Streamer.NeedStreamSpeed() == UserStreamer.NeedStreamResult.RestOnly)
                        {
                            Streamer.DisconnectStream(); return;
                        }
                        else
                        {
                            Interlocked.Increment(ref ActiveStreamers);
                        }
                    }
                    else
                    {
                        //TLの速度を測定して必要ならStreamに接続
                        switch (await Streamer.RecieveRestTimelineAuto().ConfigureAwait(false))
                        {
                        case UserStreamer.TokenStatus.Locked:
                            Streamer.PostponeConnect(); break;

                        case UserStreamer.TokenStatus.Revoked:
                            await RevokeRetry(Streamer).ConfigureAwait(false); break;

                        default:
                            UserStreamer.NeedStreamResult NeedStream = Streamer.NeedStreamSpeed();
                            if (NeedStream == UserStreamer.NeedStreamResult.Stream)
                            {
                                Streamer.RecieveStream(); Interlocked.Increment(ref ActiveStreamers);
                            }
                            //DBが求めていればToken読み込み直後だけ自分のツイートも取得(初回サインイン狙い
                            if (Streamer.NeedRestMyTweet)
                            {
                                Streamer.NeedRestMyTweet = false;
                                await Streamer.RestMyTweet().ConfigureAwait(false);
                                //User streamに繋がない場合はこっちでフォローを取得する必要がある
                                if (NeedStream != UserStreamer.NeedStreamResult.Stream)
                                {
                                    await Streamer.RestFriend().ConfigureAwait(false);
                                }
                                await Streamer.RestBlock().ConfigureAwait(false);
                                await db.StoreRestDonetoken(Streamer.Token.UserId).ConfigureAwait(false);
                            }
                            break;
                        }
                    }
                }
                catch (Exception e) { Console.WriteLine("ConnectBlock Faulted: {0}", e); }
                finally { Streamer.ConnectWaiting = false; }
            }, new ExecutionDataflowBlockOptions()
            {
                MaxDegreeOfParallelism        = config.crawl.ReconnectThreads,
                BoundedCapacity               = config.crawl.ReconnectThreads << 1, //これでもawaitする
                    SingleProducerConstrained = true,
            });

            SetMaxConnections(0);

            Stopwatch sw = new Stopwatch();

            sw.Start();
            await ShowCount();

            foreach (KeyValuePair <long, UserStreamer> s in Streamers.ToArray())  //ここでスナップショットを作る
            {
                if (!s.Value.ConnectWaiting)
                {
                    s.Value.ConnectWaiting = true;
                    await ConnectBlock.SendAsync(s.Value).ConfigureAwait(false);
                }
                do
                {
                    SetMaxConnections(ActiveStreamers);
                    if (sw.ElapsedMilliseconds > 60000)
                    {   //ここでGCする #ウンコード
                        sw.Restart();
                        await ShowCount();

                        //GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; //これは毎回必要らしい
                        //GC.Collect();
                    }
                    //ツイートが詰まってたら休む
                    if (UserStreamerStatic.NeedConnectPostpone())
                    {
                        await Task.Delay(1000).ConfigureAwait(false);
                    }
                } while (UserStreamerStatic.NeedConnectPostpone());
            }
            ConnectBlock.Complete();
            await ConnectBlock.Completion.ConfigureAwait(false);

            return(ActiveStreamers);

            //カウンターを表示したりいろいろ
            async Task ShowCount()
            {
                Counter.PrintReset();
                await WatchDogUdp.SendAsync(BitConverter.GetBytes(ThisPid), sizeof(int), WatchDogEndPoint);
            }
        }
Beispiel #12
0
        public Task AddUser(IUser user, [Remainder] string twitchUrl)
        {
            if (user.IsBot)
            {
                return(Task.CompletedTask);
            }

            if (string.IsNullOrWhiteSpace(twitchUrl))
            {
                return(Task.CompletedTask);
            }

            LiteCollection <Streamer> streamers = null;

            lock (dbLock)
            {
                streamers = database.GetCollection <Streamer>("streamers");
            }

            var urlState = twitch.GetTwitchUrlState(twitchUrl);

            if (urlState.Result != Twitch.TwitchUrlState.Ok)
            {
                ReplyAsync("Twitch user is not valid");
                return(Task.CompletedTask);
            }


            Dictionary <string, JToken> dict = twitch.TwitchQuery(Twitch.HelixStrings.Users, twitchUrl).Result;

            if (streamers.FindOne(x => x.Id == user.Id) != null)
            {
                ReplyAsync("User already exists in database");
                return(Task.CompletedTask);
            }

            var newUser = new Streamer
            {
                Id        = user.Id,
                Name      = (string)dict["login"],
                StreamUrl = "https://www.twitch.tv/" + dict["login"],
                AvatarUrl = (string)dict["profile_image_url"]
            };

            bool update = false;

            lock (dbLock)
            {
                update = streamers.Upsert(newUser);
            }


            if (!update)
            {
                ReplyAsync("Could not add user to the database");
                return(Task.CompletedTask);
            }

            ReplyAsync($"Added {user.Mention} to the database");

            return(Task.CompletedTask);
        }
 public async Task GetBytesNull()
 {
     var container = Substitute.For<IContainer>();
     var istreamer = new Streamer(container);
     await istreamer.Bytes(null);
 }
Beispiel #14
0
 public static Streamable <X> make <X>(Streamer <X> streamer, Cardinality cardinality)
 => new Streamable <X>(streamer, cardinality);
Beispiel #15
0
 public void RegisterStreamer(Streamer streamer)
 {
     this.m_Streamers.Add(streamer);
 }
Beispiel #16
0
        public void Init(object sender, EventArgs e)
        {
            string   PreShow      = File.ReadAllLines("./ShowData.txt")[0];
            string   Show         = File.ReadAllLines("./ShowData.txt")[1];
            string   PostShow     = File.ReadAllLines("./ShowData.txt")[2];
            bool     ShowTime     = Boolean.Parse(File.ReadAllLines("./ShowData.txt")[5]);
            TimeSpan TimeVariance = GetVariance();
            string   StartValue   = File.ReadAllLines("./ShowData.txt")[3];
            DateTime StartTime    = DateTime.Parse(File.ReadAllLines("./ShowData.txt")[3]) - TimeVariance;
            DateTime EndTime      = DateTime.Parse(File.ReadAllLines("./ShowData.txt")[4]) - TimeVariance;

            if (ShowTime)
            {
                MessageBox.Show(DateTime.UtcNow.ToString());
            }
            if (ShowTime)
            {
                MessageBox.Show((DateTime.Parse(File.ReadAllLines("./ShowData.txt")[3]) - TimeVariance).ToString());
            }
            Streamer.URL = PreShow;
            Application.DoEvents();
            this.Refresh();
            Streamer.Refresh();
            VolumeSlider.Refresh();
            while (DateTime.UtcNow < StartTime)
            {
                try
                {
                    WaitTimer.Text = "The Show will begin in: " + Math.Abs((DateTime.UtcNow - StartTime).Days).ToString() + " Days, " +
                                     Math.Abs((DateTime.UtcNow - StartTime).Hours).ToString() + " Hours, " +
                                     Math.Abs((DateTime.UtcNow - StartTime).Minutes).ToString() + " Minutes, " +
                                     Math.Abs((DateTime.UtcNow - StartTime).Seconds).ToString() + " Seconds.";
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.ToString());
                }
                Application.DoEvents();
            }
            WaitTimer.Text = "";
            if (DateTime.UtcNow > EndTime)
            {
                WaitTimer.Text = "The Stream has ended.";
                return;
            }
            Streamer.URL = Show;
            Streamer.Ctlcontrols.currentPosition = 0;
            Streamer.Ctlcontrols.pause();
            Streamer.settings.volume = 100;
            if (DateTime.UtcNow > StartTime && DateTime.UtcNow < EndTime)
            {
                Streamer.Ctlcontrols.currentPosition = (DateTime.UtcNow - StartTime).TotalSeconds;
            }
            while (DateTime.UtcNow >= StartTime && DateTime.UtcNow <= EndTime)
            {
                string mins = (DateTime.UtcNow - StartTime).Minutes.ToString();
                if (mins.Length == 1)
                {
                    mins = "0" + mins;
                }
                string secs = (DateTime.UtcNow - StartTime).Seconds.ToString();
                if (secs.Length == 1)
                {
                    secs = "0" + secs;
                }
                WaitTimer.Text = mins + ":" + secs;
                Application.DoEvents();
            }
            Streamer.URL        = PostShow;
            WaitTimer.Text      = "The Stream has ended.";
            WaitTimer.ForeColor = System.Drawing.Color.Red;
        }
Beispiel #17
0
        private void ClientLoop(object state)
        {
            var client = (TcpClient)state;

            Stream clientStream = client.GetStream();

            Thread.CurrentThread.Name = "client loop (server thread)";

            try
            {
                while (client.Connected)
                {
                    var inputType = clientStream.ReadByte();

                    if (inputType == -1) // connection closed
                    {
                        break;
                    }

                    // if its a simple ping do not expect a request
                    if (inputType == Constants.PingCookie)
                    {
                        clientStream.WriteByte(Constants.PingCookie);
                    }
                    else
                    {
                        var request = Streamer.FromStream <Request>(clientStream);


                        if (RequestReceived != null)
                        {
                            var sc = new ServerClient(client);
                            RequestReceived(this, new RequestEventArgs(request, sc));
                        }
                        else
                        {
                            break;
                        }

                        if (request.IsSimple)
                        {
                            // ReSharper disable once RedundantAssignment
                            var ackOkay = Streamer.ReadAck(clientStream);
                            Debug.Assert(ackOkay);
                        }
                    }
                }
            }
            catch (IOException)
            {
                //client disconnected (nothing to do)
            }
// ReSharper disable EmptyGeneralCatchClause
            catch (Exception)
// ReSharper restore EmptyGeneralCatchClause
            {
                //ignore
            }
            finally
            {
                lock (_connectedClients)
                {
                    _connectedClients.Remove(client);
                    Interlocked.Decrement(ref _connections);
                }
            }
        }
Beispiel #18
0
 public Streamable(Streamer <X> streamer, Cardinality cardinality)
 {
     this.streamer    = streamer;
     this.Cardinality = cardinality;
 }
Beispiel #19
0
 public void UnregisterStreamer(Streamer streamer)
 {
     _streamersList.Remove(streamer);
     _streamersNames.Remove(streamer.name);
 }
Beispiel #20
0
        public FiniteStreamable(Streamer <X> Streamer)

        {
            this.Streamer    = Streamer;
            this.Cardinality = Cardinality.Finite;
        }
Beispiel #21
0
        public Streamer UpdateStreamer(Streamer body, int?id)
        {
            Streamer returnStreamer;

            using (var context = new MainDataContext()) {
                Streamer streamer = id == null?context.Streamers.FirstOrDefault(item => item.streamerId == body.streamerId) : context.Streamers.FirstOrDefault(item => item.id == id);

                _logger.Info("Updating streamer...");
                if (body.streamerId != 0)
                {
                    streamer.streamerId = body.streamerId;
                }

                if (body.displayName != null)
                {
                    streamer.displayName = body.displayName;
                }

                if (body.username != null)
                {
                    streamer.username = body.username;
                }

                if (body.description != null)
                {
                    streamer.description = body.description;
                }

                if (body.isLive != null)
                {
                    streamer.isLive = body.isLive;
                }

                if (body.quality != null)
                {
                    if (body.quality == "{\"resolution\":0,\"fps\":0}")
                    {
                        streamer.quality = null;
                    }
                    else
                    {
                        streamer.quality = body.quality;
                    }
                }

                if (body.getLive != null)
                {
                    streamer.getLive = body.getLive;
                }

                if (body.viewCount != null)
                {
                    streamer.viewCount = body.viewCount;
                }

                returnStreamer = streamer;
                if (streamer != null)
                {
                    context.Update(streamer);
                }

                if (body.thumbnailLocation != null)
                {
                    IList <Parameter> headers = DownloadHelpers.GetHeaders(body.thumbnailLocation);
                    for (var x = 0; x < headers.Count; x++)
                    {
                        if (headers[x].Name == "ETag")
                        {
                            var etag = headers[x].Value;
                            if (etag != null)
                            {
                                if (streamer.thumbnailETag != etag.ToString().Replace("\"", ""))
                                {
                                    _logger.Info("Detected new thumbnail image, downloading...");
                                    streamer.thumbnailETag = DownloadHelpers.DownloadFile(body.thumbnailLocation,
                                                                                          $"{GlobalConfig.GetGlobalConfig("contentRootPath")}/streamers/{body.streamerId}/thumbnail.png");
                                }
                            }
                        }
                    }
                }

                context.SaveChanges();
            }

            return(returnStreamer);
        }
Beispiel #22
0
 FiniteStreamable(Streamer <X> Streamer, Cardinality cardinality)
 {
     this.Streamer    = Streamer;
     this.Cardinality = cardinality;
 }
        public void SerializeCachedObjectUsingProtocolBuffers()
        {
            var schema  = TypedSchemaFactory.FromType(typeof(TradeLike));
            var randGen = new Random();


            //to byte array
            for (var i = 0; i < 5000; i++)
            {
                var obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), 1);
                var packed = PackedObject.Pack(obj, schema);

                var data     = SerializationHelper.ObjectToBytes(packed, SerializationMode.ProtocolBuffers, false);
                var reloaded =
                    SerializationHelper.ObjectFromBytes <PackedObject>(data, SerializationMode.ProtocolBuffers, false);


                Assert.AreEqual(reloaded.Values[2], packed.Values[2]);

                Console.WriteLine(reloaded);
            }


            //to stream
            var stream = new MemoryStream();
            var items  = new List <PackedObject>();

            for (var i = 0; i < 1000; i++)
            {
                var obj    = new TradeLike(1, 1001, "aaa", new DateTime(2009, 10, 10), randGen.Next(1000));
                var packed = PackedObject.Pack(obj, schema);
                items.Add(packed);
            }

            var itemsReloaded = new List <PackedObject>();

            Streamer.ToStreamGeneric(stream, items);
            stream.Seek(0, SeekOrigin.Begin);
            var evt = new ManualResetEvent(false);

            Streamer.FromStream(stream,
                                delegate(PackedObject item, int i, int totalItems)
            {
                itemsReloaded.Add(item);
                if (i == totalItems)
                {
                    evt.Set();
                }
            },
                                delegate
            {
                /* ignore exceptions */
            });

            evt.WaitOne();


            for (var i = 0; i < 1000; i++)
            {
                Assert.AreEqual(itemsReloaded[i].Values[2], items[i].Values[2]);
            }
        }
Beispiel #24
0
 public void SendMany(ICollection <PackedObject> items, int[] selectedIndexes, string[] aliases)
 {
     Streamer.ToStreamMany(_stream, items, selectedIndexes, aliases);
     _stream.Seek(0, SeekOrigin.Begin);
     _dataReceived.Set();
 }
Beispiel #25
0
 public void SendMany(ICollection <CachedObject> items)
 {
     Streamer.ToStreamMany(_stream, items);
     _stream.Seek(0, SeekOrigin.Begin);
     _dataReceived.Set();
 }
Beispiel #26
0
 /// <summary>
 /// Return a list of user posts.
 /// </summary>
 /// <returns></returns>
 public List <object> GetPosts()
 {
     return(Streamer.ReadFile(OwnedPostsFile));
 }
Beispiel #27
0
 public void SendMany <THeader>(THeader header, ICollection <CachedObject> items) where THeader : class
 {
     Streamer.ToStream(_stream, header, items);
     _stream.Seek(0, SeekOrigin.Begin);
     _dataReceived.Set();
 }
        public IDisposable Stream(int id, Action<Message> action, IObserver<ConnectionState> observer)
        {
            var streamer = new Streamer(id, action, observer);
            _streamers.Add(streamer);

            return ActionDisposable.Create(() => _streamers.Remove(streamer));
        }
Beispiel #29
0
        public StreamHelpers.GetStreamsResult FetchStreams(int id)
        {
            bool isLive = false;

            using (var context = new MainDataContext()) {
                Streamer data = context.Streamers.FirstOrDefault(item => item.streamerId == id);

                if (data != null && data.isLive != null)
                {
                    isLive = (bool)data.isLive;
                }
            }

            TwitchApiHelpers twitchApiHelpers = new TwitchApiHelpers();
            var response = twitchApiHelpers.TwitchRequest("https://api.twitch.tv/helix/videos" +
                                                          $"?user_id={id}" +
                                                          "&first=100", Method.GET);
            var deserializeResponse =
                JsonConvert.DeserializeObject <StreamHelpers.GetStreamsResult>(response.Content);

            StreamHelpers.GetStreamsResult getStreamsResult =
                new StreamHelpers.GetStreamsResult();
            getStreamsResult.data = new List <StreamHelpers.Data>();
            string cursor;

            foreach (var stream in deserializeResponse.data)
            {
                if (isLive && stream.thumbnail_url.Length > 0)
                {
                    getStreamsResult.data.Add(stream);
                }
                else if (!isLive)
                {
                    getStreamsResult.data.Add(stream);
                }
            }

            if (deserializeResponse.pagination.cursor != null && deserializeResponse.data.Count >= 100)
            {
                cursor = deserializeResponse.pagination.cursor;
            }
            else
            {
                cursor = null;
            }

            while (cursor != null)
            {
                var paginatedResponse = twitchApiHelpers.TwitchRequest("https://api.twitch.tv/helix/videos" +
                                                                       $"?user_id={id}" +
                                                                       "&first=100" +
                                                                       $"&after={deserializeResponse.pagination.cursor}",
                                                                       Method.GET);
                deserializeResponse =
                    JsonConvert.DeserializeObject <StreamHelpers.GetStreamsResult>(paginatedResponse
                                                                                   .Content);


                foreach (var stream in deserializeResponse.data)
                {
                    if (isLive && stream.thumbnail_url.Length > 0)
                    {
                        getStreamsResult.data.Add(stream);
                    }
                    else if (!isLive)
                    {
                        getStreamsResult.data.Add(stream);
                    }
                }

                if (deserializeResponse.data.Count >= 100)
                {
                    cursor = deserializeResponse.pagination.cursor;
                }
                else
                {
                    cursor = null;
                }
            }

            for (int x = 0; x < getStreamsResult.data.Count; x++)
            {
                /*if (getStreamsResult.data[x].type != "archive") {
                 *  // only retrieve vods
                 *  getStreamsResult.data.Remove(getStreamsResult.data[x]);
                 * }*/

                // manually add thumbnail dimensions because twitch is too lazy to do it
                getStreamsResult.data[x].thumbnail_url = getStreamsResult.data[x].thumbnail_url
                                                         .Replace("%{width}", "320").Replace("%{height}", "180");
            }

            return(getStreamsResult);
        }
        public void InitIsCalledInConstructorWithParameter()
        {
            Streamer streamer = new Streamer(_mediaDeviceWrapperMock.Object, new IntPtr(12345));

            _mediaDeviceWrapperMock.Verify(m => m.Init(It.Is <IntPtr>(i => i.ToInt32() == 12345)));
        }
Beispiel #31
0
        public static async Task InitializeAsync(StreamingContext context)
        {
            context.Database.EnsureCreated();

            if (context.Streamers.Any())
            {
                var streamersWithSubscribers = context.Streamers.Where(streamer => streamer.Subscribers.Any(sub => sub.Age > 18)).ToList();

                foreach (var streamer in streamersWithSubscribers)
                {
                    Console.WriteLine($"Streamer: {streamer.Name}");
                }

                var subscribersMonths = context.Subscribers.Where(sub => sub.Subscriptions.Any(x => x.MonthsSubscribed > 3)).ToList();
                foreach (var sub in subscribersMonths)
                {
                    Console.WriteLine($"Subscriber: {sub.Name}");
                }

                return;
            }

            var streamer1 = new Streamer {
                Name = "Patrick"
            };
            var streamer2 = new Streamer {
                Name = "Ryan"
            };

            var streamers = new Streamer[]
            {
                streamer1,
                streamer2,
                new Streamer {
                    Name = "Streamer3"
                },
            };

            context.AddRange(streamers);
            context.SaveChanges();

            var subscriber1 = new Subscriber {
                Name = "Aaron", Age = 20, Subscriptions = new List <Subscription> {
                    new Subscription {
                        Streamer = streamer1, MonthsSubscribed = 6
                    }
                }, Streamers = new List <Streamer> {
                    streamer2
                }
            };
            var subscriber2 = new Subscriber {
                Name = "Becca", Age = 16, Streamers = new List <Streamer> {
                    streamer1, streamer2
                }
            };
            var subscribers = new Subscriber[]
            {
                subscriber1,
                subscriber2,
                new Subscriber {
                    Name = "Carol", Age = 1
                },
            };

            context.AddRange(subscribers);
            context.SaveChanges();

            //var subscriptions = new Subscription[]
            //{
            //    new Subscription {
            //        Streamer = streamer1,
            //        Subscriber = subscriber1,
            //        MonthsSubscribed = 2
            //    },
            //    new Subscription {
            //        Streamer = streamer1,
            //        Subscriber = subscriber2,
            //        MonthsSubscribed = 6
            //    },
            //    new Subscription {
            //        Streamer = streamer2,
            //        Subscriber = subscriber1,
            //        MonthsSubscribed = 2
            //    },
            //};
        }
Beispiel #32
0
    void SetupClusters(GameObject groupCollider, Vector2Int sizeMap, bool activeScene)
    {
        Vector2 sizeCluster = new Vector2(15f, 15f);
        int     width       = sizeMap.x % sizeCluster.x == 0 ? sizeMap.x / (int)sizeCluster.x : sizeMap.x / (int)sizeCluster.x + 1;
        int     height      = sizeMap.y % sizeCluster.y == 0 ? sizeMap.y / (int)sizeCluster.y : sizeMap.y / (int)sizeCluster.y + 1;

        GameObject[,] clusters = new GameObject[width, height];
        GameObject[,] parents  = new GameObject[width, height];
        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < height; j++)
            {
                clusters[i, j] = new GameObject("Cluster " + i + ":" + j);
                clusters[i, j].transform.position = new Vector3(i * sizeCluster.x + sizeCluster.x / 2f, -j * sizeCluster.y - sizeCluster.y / 2f);
                parents[i, j] = new GameObject("parent");
                parents[i, j].transform.SetParent(clusters[i, j].transform);
                parents[i, j].transform.localPosition = Vector3.zero;
            }
        }

        for (int k = 0; k < groupCollider.transform.childCount; k++)
        {
            int i = (int)(groupCollider.transform.GetChild(k).position.x / sizeCluster.x);
            int j = (int)(-groupCollider.transform.GetChild(k).position.y / sizeCluster.y);
            if (i < 0)
            {
                i = 0;
            }
            if (i >= width)
            {
                i = width - 1;
            }
            if (j < 0)
            {
                j = 0;
            }
            if (j >= height)
            {
                j = height - 1;
            }
            groupCollider.transform.GetChild(k).SetParent(parents[i, j].transform);
            k--;
        }

        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < height; j++)
            {
                clusters[i, j].transform.SetParent(groupCollider.transform);
                Streamer streamer = clusters[i, j].AddComponent <Streamer>();

                streamer.distanceStream         = 15f;
                streamer.nbSecondsForRefreshing = 3f;
                streamer.target = parents[i, j];
                if (activeScene)
                {
                    streamer.StartStream();
                }
            }
        }
    }
Beispiel #33
0
 public void UnRegisterStreamer(Streamer streamer)
 {
     this.m_Streamers.Remove(streamer);
 }
Beispiel #34
0
 public void RegisterStreamer(Streamer newStreamer)
 {
     _streamersList.Add(newStreamer);
     _streamersNames.Add(newStreamer.name);
 }
Beispiel #35
0
 public void WaitForAck()
 {
     Streamer.ReadAck(_tcpClient.GetStream());
 }
Beispiel #36
0
 void Start()
 {
     streamerPool = new List<Streamer>();
     currentStreamer = GetComponentInChildren<Streamer>();
 }