Skip to content

Instantly share code, notes, and snippets.

View neuecc's full-sized avatar

Yoshifumi Kawai neuecc

View GitHub Profile
public sealed class MessagePipeDiagnosticsInfo
{
/// <summary>Get current subscribed count.</summary>
public int SubscribeCount { get; }
/// <summary>
/// When MessagePipeOptions.EnableCaptureStackTrace is enabled, list all stacktrace on subscribe.
/// </summary>
public StackTraceInfo[] GetCapturedStackTraces(bool ascending = true);
// keyless-sync
public interface IPublisher<TMessage>
{
void Publish(TMessage message);
}
public interface ISubscriber<TMessage>
{
IDisposable Subscribe(IMessageHandler<TMessage> handler, params MessageHandlerFilter<TMessage>[] filters);
}
// MagicOnion(similar as SignalR, realtime event framework for .NET and Unity)
public class UnityConnectionHub : StreamingHubBase<IUnityConnectionHub, IUnityConnectionHubReceiver>, IUnityConnectionHub
{
readonly IPublisher<Guid, UnitEventData> eventPublisher;
readonly IPublisher<Guid, ConnectionClose> closePublisher;
Guid id;
public UnityConnectionHub(IPublisher<Guid, UnitEventData> eventPublisher, IPublisher<Guid, ConnectionClose> closePublisher)
{
this.eventPublisher = eventPublisher;
using MessagePipe;
public struct MyEvent { }
public class SceneA
{
readonly IPublisher<MyEvent> publisher;
public SceneA(IPublisher<MyEvent> publisher)
{
using MessagePipe;
using Microsoft.Extensions.DependencyInjection;
Host.CreateDefaultBuilder()
.ConfigureServices((ctx, services) =>
{
services.AddMessagePipe(); // AddMessagePipe(options => { }) for configure options
})
using Microsoft.Extensions.DependencyInjection;
using PropertyInjection;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
using System.Threading;
using UnityEngine;
using Cysharp.Threading.Tasks.Triggers;
using System;
using Cysharp.Threading.Tasks.Internal;
namespace Cysharp.Threading.Tasks
{
public static class UniTaskObservableExtensions
{
public static IObservable<TResult> SelectManyUniTask<TSource, TResult>(this IObservable<TSource> observable,
Func<TSource, IObserver<TResult>, CancellationToken, UniTask> observeAsync)
{
return new SelectManyUniTaskObservable<TSource, TResult>(observable, observeAsync);
}
class SelectManyUniTaskObservable<TSource, TResult> : IObservable<TResult>
{
StartAsync(string command, string? workingDirectory = null, IDictionary<string, string>? environmentVariable = null, Encoding? encoding = null)
StartAsync(string fileName, string? arguments, string? workingDirectory = null, IDictionary<string, string>? environmentVariable = null, Encoding? encoding = null)
StartAsync(ProcessStartInfo processStartInfo)
Task<string[]> ToTask(CancellationToken cancellationToken = default)
using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1)))
{
await foreach (var item in ProcessX.StartAsync("dotnet --info").WithCancellation(cts.Token))
{
Console.WriteLine(item);
}
}