Beispiel #1
0
        public override async Task OnActivateAsync()
        {
            _world = await GrainFactory.GetGrain <IWorldAccessor>(0).GetWorld(this.GetPrimaryKeyString());

            _chunkSender      = GrainFactory.GetGrain <IChunkSender>(this.GetPrimaryKeyString());
            _lastGameTickTime = DateTime.UtcNow;
            _tickables        = new HashSet <ITickable>();
            _gameTick         = RegisterTimer(OnGameTick, null, TimeSpan.Zero, TimeSpan.FromMilliseconds(50));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="GrpcClient"/> class.
 /// </summary>
 /// <param name="channel">The channel to use to make remote calls.</param>
 /// <param name="host">The host<see cref="IPEndPoint"/></param>
 /// <param name="chunkSender">The chunkSender<see cref="IChunkSender{Command, FetchRequest, GrpcResponse}"/></param>
 /// <param name="chunkReceiver">The chunkReceiver<see cref="IChunkReceiver{Command}"/></param>
 internal GrpcClient(Channel channel,
                     IPEndPoint host,
                     IChunkSender <Command, FetchRequest, GrpcResponse> chunkSender = null,
                     IChunkReceiver <Command> chunkReceiver = null) : base(channel)
 {
     this.channel       = channel;
     this.remoteHost    = host;
     this.chunkSender   = chunkSender ?? new ChunkSender();
     this.chunkReceiver = chunkReceiver ?? new ChunkReceiver();
 }
Beispiel #3
0
        public override async Task OnActivateAsync()
        {
            await base.OnActivateAsync();

            _logger = ServiceProvider.GetRequiredService <ILoggerFactory>().CreateLogger <GameSession>();
            _world  = await GrainFactory.GetGrain <IWorldAccessor>(0).GetWorld(this.GetPrimaryKeyString());

            _chunkSender = GrainFactory.GetGrain <IChunkSender>(this.GetPrimaryKeyString());
            await _fixedUpdate.Start(_world);
        }
Beispiel #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="GRPCServer"/> class.
 /// </summary>
 /// <param name="host">The <see cref="IPEndPoint"/></param>
 /// <param name="chunkSender">The chunkSender<see cref="IChunkSender{Command, FetchRequest, GrpcResponse}"/></param>
 /// <param name="chunkReceiver">The chunkReceiver<see cref="IChunkReceiver{Command}"/></param>
 internal GRPCServer(IPEndPoint host,
                     IChunkSender <Command, FetchRequest, GrpcResponse> chunkSender,
                     IChunkReceiver <Command> chunkReceiver)
 {
     this.Host          = host;
     this.chunkSender   = chunkSender;
     this.chunkReceiver = chunkReceiver;
     this.chunkReceiver.FileReceived = async(cmd, streamId, token, header) =>
     {
         // This creates a dummy stream only to receive the File and also because the main stream already exists in the subscription handler
         // The stream will be closed as soon as the file is being successfully received or a timeout happend
         IStream <Command> stream = new GrpcStream(null, null, streamId);
         (stream as GrpcStream).Connected = true;
         await this.OnCommand?.Invoke(cmd, streamId, token, header);
     };
 }
        /// <summary>
        /// Creates the specific communication client based on grpc technoligy
        /// </summary>
        /// <param name="address">The address.</param>
        /// <param name="chunkSender">The chunkSender<see cref="IChunkSender{Command, FetchRequest, GrpcResponse}"/></param>
        /// <param name="chunkReceiver">The chunkReceiver<see cref="IChunkReceiver{Command}"/></param>
        /// <returns>The <see cref="IClient{Command, FetchRequest, GrpcResponse}"/></returns>
        public static IClient <Command, FetchRequest, GrpcResponse> Create(string address, IChunkSender <Command, FetchRequest, GrpcResponse> chunkSender, IChunkReceiver <Command> chunkReceiver)
        {
            try
            {
                var           endPoint      = address.ToIpEndpoint();
                Channel       channel       = null;
                ChannelOption optionReceive = new ChannelOption(ChannelOptions.MaxReceiveMessageLength, GrpcStream.MaxPackageSize);
                ChannelOption optionSend    = new ChannelOption(ChannelOptions.MaxSendMessageLength, GrpcStream.MaxPackageSize);

                if (System.IO.File.Exists("ca.crt"))
                {
                    var cacert     = System.IO.File.ReadAllText(@"ca.crt");
                    var clientcert = System.IO.File.ReadAllText(@"client.crt");
                    var clientkey  = System.IO.File.ReadAllText(@"client.key");
                    var ssl        = new SslCredentials(cacert, new KeyCertificatePair(clientcert, clientkey));
                    channel = new Channel(string.Format("{0}:{1}", endPoint.Address.ToString(), endPoint.Port), ssl);
                }
                else
                {
                    channel = new Channel(string.Format("{0}:{1}", endPoint.Address.ToString(), endPoint.Port), ChannelCredentials.Insecure, new List <ChannelOption>()
                    {
                        optionReceive, optionSend
                    });
                }

                return(new GrpcClient(channel, endPoint, chunkSender, chunkReceiver));
            }
            catch (Exception ex)
            {
                throw new Exception("Grpc initialization error", ex);
            }
        }
Beispiel #6
0
 /// <summary>
 /// Creates the specific communication server
 /// </summary>
 /// <param name="host">The <see cref="IPEndPoint"/></param>
 /// <param name="chunkSender">The chunkSender<see cref="IChunkSender{Command, FetchRequest, GrpcResponse}"/></param>
 /// <param name="chunkReceiver">The chunkReceiver<see cref="IChunkReceiver{Command}"/></param>
 /// <returns>The <see cref="IServer{IMessage}"/></returns>
 public static IServer <Command, FetchRequest, GrpcResponse> Create(IPEndPoint host,
                                                                    IChunkSender <Command, FetchRequest, GrpcResponse> chunkSender,
                                                                    IChunkReceiver <Command> chunkReceiver)
 {
     return(new GRPCServer(host, chunkSender, chunkReceiver));
 }