/// <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); }
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));
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); }
// +++ unused eventhandlers (so far) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ private void _socket_OnStreamState(object sender, IStreamState e) { Debug.Log("Call to socket_OnStreamState"); }
public IStreamJob CreateJob(IStreamState state) => new StreamJob(senderFactory.Create(state), plannerFactory.Create(state), log.ForContext(state.Name), requestTimeout);