Ejemplo n.º 1
0
        public static byte[] Pack(OutboundMessage message)
        {
            var json = Serialize(message);

            using (var compressedStream = new ZlibStream(new MemoryStream(json, false), CompressionMode.Compress, CompressionLevel.Default, false))
                using (var outputStream = new MemoryStream())
                {
                    compressedStream.CopyTo(outputStream);

                    return(outputStream.ToArray());
                }
        }
Ejemplo n.º 2
0
        public static byte[] Pack(OutboundMessage message)
        {
            message.Sent = DateTime.UtcNow;

            var json = Serialize(message);

            using (var compressedStream = new ZlibStream(new MemoryStream(json, false), CompressionMode.Compress, (CompressionLevel)Level, false))
                using (var outputStream = new MemoryStream())
                {
                    compressedStream.CopyTo(outputStream);

                    return(outputStream.ToArray());
                }
        }
Ejemplo n.º 3
0
        private static async void Emit(OutboundMessage message)
        {
            if (message.Event != CoreEvents.LogMirror)
            {
                Logger.Trace(message.Payloads.Count > 0
                                ? $"Emit: \"{message.Event}\" with {message.Payloads.Count} payload{(message.Payloads.Count > 1 ? "s" : string.Empty)}:{Environment.NewLine}\t{string.Join($"{Environment.NewLine}\t", message.Payloads)}"
                                : $"Emit: \"{message.Event}\" with no payloads");
            }

            // Marshall back to the main thread in order to use a native call.
            await BaseScript.Delay(0);

            BaseScript.TriggerServerEvent(message.Event, message.Pack());
        }
Ejemplo n.º 4
0
        public void Fire(OutboundMessage message)
        {
            if (!message.Event.StartsWith("nfive:log:"))
            {
                if (message.Payloads.Count > 0)
                {
                    this.logger.Trace($"Fire: \"{message.Event}\" with {message.Payloads.Count} payload{(message.Payloads.Count > 1 ? "s" : string.Empty)}:{Environment.NewLine}\t{string.Join($"{Environment.NewLine}\t", message.Payloads)}");
                }
                else
                {
                    this.logger.Trace($"Fire: \"{message.Event}\" with no payloads");
                }
            }

            BaseScript.TriggerServerEvent(message.Event, message.Pack());
        }
Ejemplo n.º 5
0
        public void Fire(OutboundMessage message)
        {
            var serializedMessage     = this.serializer.Serialize(message);
            var serializedMessageSize = serializedMessage.Length * 16;

            //this.logger.Debug($"Fire: \"{message.Event}\" with {message.Payloads.Count} payload(s) ({serializedMessage.Length * 16} bits): {string.Join(", ", message.Payloads)}");
            bandwidth += serializedMessageSize;
            this.logger.Debug($"Fire: \"{message.Event}\" with {message.Payloads.Count} payload(s) of total size '{serializedMessageSize}' bits");
            BaseScript.TriggerServerEvent(message.Event, serializedMessage);

            if (Game.GameTime <= bandwidthTime + 1000)
            {
                return;
            }
            bandwidthTime = Game.GameTime;
            this.logger.Debug($"RPC bits per second: {bandwidth}");
            bandwidth = 0;
        }
Ejemplo n.º 6
0
        private static async Task <InboundMessage> InternalRequest(string @event, params object[] payloads)
        {
            var tcs = new TaskCompletionSource <InboundMessage>();

            var callback = new Action <byte[]>(data =>
            {
                var message = InboundMessage.From(data);

                Logger.Trace(message.Payloads.Count > 0
                                        ? $"Request Received: \"{message.Event}\" with {message.Payloads.Count} payload{(message.Payloads.Count > 1 ? "s" : string.Empty)}:{Environment.NewLine}\t{string.Join($"{Environment.NewLine}\t", message.Payloads)}"
                                        : $"Request Received: \"{message.Event}\" with no payloads");

                tcs.SetResult(message);
            });


            var msg = new OutboundMessage
            {
                Id       = Guid.NewGuid(),
                Event    = @event,
                Payloads = payloads.Select(p => Serializer.Serialize(p)).ToList()
            };

            try
            {
                events[$"{msg.Id}:{@event}"] += callback;

                Emit(msg);

                return(await tcs.Task);
            }
            finally
            {
                events[$"{msg.Id}:{@event}"] -= callback;
            }
        }