示例#1
0
        private void FlushPacket(ServerStsPacket packet)
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write(packet.Protocol);
                    writer.Write(" ");
                    writer.Write(packet.StatusCode);
                    writer.Write(" ");
                    writer.Write(" ");
                    writer.Write(packet.Status);
                    writer.Write("\r\n");

                    foreach ((string name, string value) in packet.Headers)
                    {
                        writer.Write($"{name}:{value}");
                        writer.Write("\r\n");
                    }

                    writer.Write("\r\n");
                    writer.Write(packet.Body);
                    writer.Flush();

                    byte[] buffer = stream.ToArray();
                    if (packet.Encrypt)
                    {
                        serverEncryption.Encrypt(buffer);
                    }

                    SendRaw(buffer);
                }

            log.Trace($"Sent packet response {packet.StatusCode}, {packet.Status}");
        }
示例#2
0
        public void EnqueueMessage(uint statusCode, string status, IWritable message)
        {
            var settings = new XmlWriterSettings
            {
                OmitXmlDeclaration = true,
                Indent             = true,
                IndentChars        = "",
                NewLineChars       = "\n",
                Encoding           = Encoding.UTF8
            };

            using (var stringWriter = new StringWriter())
                using (var writer = XmlWriter.Create(stringWriter, settings))
                {
                    writer.WriteStartDocument();
                    message.Write(writer);
                    writer.WriteEndDocument();
                    writer.Flush();

                    var packet = new ServerStsPacket(statusCode, status, stringWriter.ToString(), sequence, serverEncryption != null);
                    outgoingPackets.Enqueue(packet);
                }
        }