10.11.6
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<Project>
|
||||
|
||||
<PropertyGroup>
|
||||
<PluginVersion>10.11.5</PluginVersion>
|
||||
<ProPluginVersion>10.11.5</ProPluginVersion>
|
||||
<DefaultVersion>10.11.5</DefaultVersion>
|
||||
<PluginVersion>10.11.6</PluginVersion>
|
||||
<ProPluginVersion>10.11.6</ProPluginVersion>
|
||||
<DefaultVersion>10.11.6</DefaultVersion>
|
||||
<AuthenticationVersion>10.11.2</AuthenticationVersion>
|
||||
<SourceGeneratorVersion>10.11.2</SourceGeneratorVersion>
|
||||
<NET8Version>8.0.19</NET8Version>
|
||||
|
@@ -385,39 +385,27 @@ public static class ByteBlockExtension
|
||||
}
|
||||
public static void WriteBackValue<TWriter, T>(ref TWriter writer, T value, EndianType endianType, int pos)
|
||||
where T : unmanaged
|
||||
where TWriter : IBytesWriter
|
||||
where TWriter : IByteBlockWriter
|
||||
{
|
||||
if (writer.SupportsRewind)
|
||||
{
|
||||
var nowPos = (int)writer.WrittenCount - pos;
|
||||
writer.Advance(-nowPos);
|
||||
var size = Unsafe.SizeOf<T>();
|
||||
var span = writer.GetSpan(size);
|
||||
TouchSocketBitConverter.GetBitConverter(endianType).WriteBytes(span, value);
|
||||
writer.Advance(nowPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException("Writer version mismatch or does not support rewind.");
|
||||
}
|
||||
var nowPos = (int)writer.WrittenCount - pos;
|
||||
writer.Advance(-nowPos);
|
||||
var size = Unsafe.SizeOf<T>();
|
||||
var span = writer.GetSpan(size);
|
||||
TouchSocketBitConverter.GetBitConverter(endianType).WriteBytes(span, value);
|
||||
writer.Advance(nowPos);
|
||||
|
||||
}
|
||||
public static void WriteBackValue<TWriter, T>(ref TWriter writer, T value, EndianType endianType, long pos)
|
||||
where T : unmanaged
|
||||
where TWriter : IBytesWriter
|
||||
where TWriter : IByteBlockWriter
|
||||
{
|
||||
if (writer.SupportsRewind)
|
||||
{
|
||||
var nowPos = (int)(writer.WrittenCount - pos);
|
||||
writer.Advance(-nowPos);
|
||||
var size = Unsafe.SizeOf<T>();
|
||||
var span = writer.GetSpan(size);
|
||||
TouchSocketBitConverter.GetBitConverter(endianType).WriteBytes(span, value);
|
||||
writer.Advance(nowPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException("Writer version mismatch or does not support rewind.");
|
||||
}
|
||||
var nowPos = (int)(writer.WrittenCount - pos);
|
||||
writer.Advance(-nowPos);
|
||||
var size = Unsafe.SizeOf<T>();
|
||||
var span = writer.GetSpan(size);
|
||||
TouchSocketBitConverter.GetBitConverter(endianType).WriteBytes(span, value);
|
||||
writer.Advance(nowPos);
|
||||
|
||||
}
|
||||
|
||||
public static string ReadNormalString<TReader>(ref TReader reader, int length)
|
||||
@@ -429,20 +417,32 @@ where TWriter : IBytesWriter
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
public static void WriteBackNormalString<TWriter>(ref TWriter writer, string value, Encoding encoding, int pos)
|
||||
where TWriter : IBytesWriter
|
||||
where TWriter : IByteBlockWriter
|
||||
{
|
||||
if (writer.SupportsRewind)
|
||||
var nowPos = (int)(writer.WrittenCount - pos);
|
||||
writer.Advance(-nowPos);
|
||||
WriterExtension.WriteNormalString(ref writer, value, encoding);
|
||||
writer.Advance(nowPos);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static int WriteNormalString(this Span<byte> span, string value, Encoding encoding)
|
||||
{
|
||||
var maxSize = encoding.GetMaxByteCount(value.Length);
|
||||
var chars = value.AsSpan();
|
||||
|
||||
unsafe
|
||||
{
|
||||
var nowPos = (int)(writer.WrittenCount - pos);
|
||||
writer.Advance(-nowPos);
|
||||
WriterExtension.WriteNormalString(ref writer, value, encoding);
|
||||
writer.Advance(nowPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException("Writer version mismatch or does not support rewind.");
|
||||
fixed (char* p = &chars[0])
|
||||
{
|
||||
fixed (byte* p1 = &span[0])
|
||||
{
|
||||
var len = Encoding.UTF8.GetBytes(p, chars.Length, p1, maxSize);
|
||||
return len;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -144,6 +144,7 @@ public class S7Send : ISendMessage
|
||||
|
||||
internal void GetWriteByteCommand<TByteBlock>(ref TByteBlock byteBlock, SiemensS7Address[] addresss) where TByteBlock : IBytesWriter
|
||||
{
|
||||
var span = byteBlock.GetSpan(1024);
|
||||
byte itemLen = (byte)addresss.Length;
|
||||
ushort parameterLen = (ushort)(itemLen * 12 + 2);
|
||||
//TPKT
|
||||
@@ -201,7 +202,10 @@ public class S7Send : ISendMessage
|
||||
}
|
||||
ushort telegramLen = (ushort)(itemLen * 12 + 19 + dataLen);
|
||||
|
||||
ByteBlockExtension.WriteBackValue(ref byteBlock, (ushort)telegramLen, EndianType.Big, 2);//长度
|
||||
ByteBlockExtension.WriteBackValue(ref byteBlock, (ushort)dataLen, EndianType.Big, 15);//长度
|
||||
TouchSocketBitConverter.GetBitConverter(EndianType.Big).WriteBytes(span.Slice(2), (ushort)telegramLen);
|
||||
//ByteBlockExtension.WriteBackValue(ref byteBlock, (ushort)telegramLen, EndianType.Big, 2);//长度
|
||||
TouchSocketBitConverter.GetBitConverter(EndianType.Big).WriteBytes(span.Slice(15), (ushort)dataLen);
|
||||
|
||||
//ByteBlockExtension.WriteBackValue(ref byteBlock, (ushort)dataLen, EndianType.Big, 15);//长度
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user