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); } }
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); }