Esempio n. 1
0
        /// <summary>
        /// See <a href="https://heroiclabs.com/docs/advanced-streams/#built-in-streams">Nakama docs</a>
        /// </summary>
        /// <param name="state"></param>
        private void OnReceivedStreamState(IStreamState state)
        {
            try
            {
                // switch (state.Sender.UserId) // TODO: case server, case player ...
                // {
                //  case "":
                //   SessionManager.instance.sessio
                // }
                // state.Stream.
                switch (state.Stream.Mode)
                {
                case 0:                 // Notifications
                case 1:                 // Status
                case 2:                 // Chat Channel
                case 3:                 // Group Chat
                case 4:                 // Direct Message
                case 5:                 // Relayed Match
                    throw new NotImplementedException();

                case 6:                 // Authoritative Match
                    ReceiveMatchStateMessage(Encoding.UTF8.GetBytes(state.State));
                    break;
                }
            }
            catch (Exception ex)
            {
                Debug.LogError($"Server sent incorrect message through stream {ex}");
            }
        }
        public void TestSetup()
        {
            state = Substitute.For <IStreamState>();
            state.Name.Returns(StreamName);
            state.BufferPool.Returns(pool   = Substitute.For <IBufferPool>());
            state.Statistics.Returns(stats  = Substitute.For <IStatisticsCollector>());
            state.Settings.Returns(settings = new StreamSettings());

            batcher          = new BufferSnapshotBatcher(1);
            contentFactory   = new RequestContentFactory(new BufferPool());
            responseAnalyzer = new ResponseAnalyzer(ResponseAnalysisContext.Stream);
            statusAnalyzer   = new StatusAnalyzer();

            requestSender = Substitute.For <IGateRequestSender>();

            sender = new StreamSender(
                () => GlobalApiKey,
                state,
                batcher,
                contentFactory,
                requestSender,
                responseAnalyzer,
                statusAnalyzer,
                new SynchronousConsoleLog());

            cancellation = new CancellationTokenSource();

            SetupBuffers(50, 100, 150);
            SetupResponses(HerculesStatus.Success);
        }
Esempio n. 3
0
        public void TestSetup()
        {
            factory = Substitute.For <IStreamStateFactory>();
            factory.Create(Arg.Any <string>()).Returns(_ => state);

            state = Substitute.For <IStreamState>();
            state.BufferPool.Returns(_ => pool);
            state.Statistics.Returns(_ => stats);
            state.RecordWriter.Returns(_ => writer);
            state.SendSignal.Returns(new AsyncManualResetEvent(false));

            buffer = Substitute.For <IBuffer>();
            writer = Substitute.For <IRecordWriter>();
            stats  = Substitute.For <IStatisticsCollector>();
            daemon = Substitute.For <IDaemon>();

            pool = Substitute.For <IBufferPool>();
            pool.TryAcquire(out _)
            .Returns(
                info =>
            {
                info[0] = buffer;
                return(true);
            });

            log = new SynchronousConsoleLog();

            sink = new HerculesSink(factory, daemon, log);
        }
 public IStreamSender Create(IStreamState state) =>
 new StreamSender(
     apiKeyProvider,
     state,
     snapshotBatcher,
     contentFactory,
     requestSender,
     responseAnalyzer,
     statusAnalyzer,
     log.ForContext(state.Name));
Esempio n. 5
0
 public StreamSender(
     [NotNull] Func <string> globalApiKeyProvider,
     [NotNull] IStreamState streamState,
     [NotNull] IBufferSnapshotBatcher snapshotBatcher,
     [NotNull] IRequestContentFactory contentFactory,
     [NotNull] IGateRequestSender gateRequestSender,
     [NotNull] IResponseAnalyzer responseAnalyzer,
     [NotNull] IStatusAnalyzer statusAnalyzer,
     [NotNull] ILog log)
 {
     this.globalApiKeyProvider = globalApiKeyProvider;
     this.streamState          = streamState;
     this.snapshotBatcher      = snapshotBatcher;
     this.contentFactory       = contentFactory;
     this.gateRequestSender    = gateRequestSender;
     this.responseAnalyzer     = responseAnalyzer;
     this.statusAnalyzer       = statusAnalyzer;
     this.log = log;
 }
        public void TestSetup()
        {
            state1 = Substitute.For <IStreamState>();
            state2 = Substitute.For <IStreamState>();
            state3 = Substitute.For <IStreamState>();

            state1.Name.Returns("state1");
            state2.Name.Returns("state2");
            state3.Name.Returns("state3");

            statesProvider = Substitute.For <IStreamStatesProvider>();
            statesProvider.GetStates().Returns(new[] { state1, state2, state3 });

            jobFactory  = Substitute.For <IStreamJobFactory>();
            jobLauncher = Substitute.For <IJobLauncher>();

            state = new SchedulerState(Task.CompletedTask, CancellationToken.None);

            synchronizer = new StateSynchronizer(statesProvider, jobFactory, jobLauncher);
        }
Esempio n. 7
0
    // +++ unused eventhandlers (so far) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    private void _socket_OnStreamState(object sender, IStreamState e)
    {
        Debug.Log("Call to socket_OnStreamState");
    }
Esempio n. 8
0
 public IStreamJob CreateJob(IStreamState state)
 => new StreamJob(senderFactory.Create(state), plannerFactory.Create(state), log.ForContext(state.Name), requestTimeout);