Exemplo n.º 1
0
        public virtual bool SendCustom(ICustomMessage message, DeliveryType deliveryType, int channel)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            ChannelDescriptor.CheckChannelValue(channel);

            using (var rawMessage = this.Parent.CreateMessage())
            {
                rawMessage.DeliveryType = deliveryType;
                rawMessage.Channel      = channel;

                using (WardenStreamWriter sw = new WardenStreamWriter(rawMessage.BaseStream, true))
                {
                    message.WriteTo(new WriteFormatterInfo(sw, this.configuration.Serializer));
                }

                UdpSendStatus result = SendRawMessage(new Warden.Networking.Udp.Messages.MessageInfo(rawMessage,
                                                                                                     deliveryType, channel));

                return(result != UdpSendStatus.Failed);
            }
        }
Exemplo n.º 2
0
        public bool SendReliable(ICustomMessage message)
        {
            if (!this.Connected)
            {
                return(false);
            }

            TcpRawMessage rawMessage = Parent.CreateMessage();

            using (WardenStreamWriter sw = new WardenStreamWriter(rawMessage.BaseStream, true))
            {
                message.WriteTo(new WriteFormatterInfo(sw, configuration.Serializer));
            }

            if (rawMessage.Length >= configuration.CompressionThreshold)
            {
                logger.Trace($"Message {message} size exceeds compression threshold {configuration.CompressionThreshold}, compressing it");
                using (rawMessage)
                {
                    var compressedMessage = rawMessage.Compress(CompressionLevel.Optimal);
                    logger.Trace($"Compressing {rawMessage} to {compressedMessage}");
                    compressedMessage.Position = 0;
                    SendRawMessage(compressedMessage);
                }
            }
            else
            {
                SendRawMessage(rawMessage);
            }

            return(true);
        }