First Unity code equating session

This commit is contained in:
2025-05-06 23:20:57 +03:00
parent 82c1cf72a0
commit dae96c9674
@@ -93,19 +93,10 @@ namespace mROA.Implementation
{ {
if (_serialization == null) if (_serialization == null)
throw new NullReferenceException("Serialization toolkit is not initialized"); throw new NullReferenceException("Serialization toolkit is not initialized");
// Console.WriteLine("Sending {0}", JsonSerializer.Serialize(message));
bool withError = false; bool withError = false;
while (true) while (true)
{ {
if (withError)
{
#if TRACE
Console.WriteLine("Post again");
#endif
}
if (await PostMessageInternal(messageHeader)) if (await PostMessageInternal(messageHeader))
break; break;
@@ -134,65 +125,34 @@ namespace mROA.Implementation
await PostMessageAsync( await PostMessageAsync(
new NetworkMessageHeader(_serialization!, new ClientRecovery(Math.Abs(ConnectionId)), Context)); new NetworkMessageHeader(_serialization!, new ClientRecovery(Math.Abs(ConnectionId)), Context));
var ping = await ReceiveChanel.Reader.ReadAsync(); var ping = await ReceiveChanel.Reader.ReadAsync();
#if TRACE
Console.WriteLine($"Ping received {ping.Id}");
#endif
} }
else else
{ {
await _trustedWriter.WriteAsync(new NetworkMessageHeader()); await _trustedWriter.WriteAsync(new NetworkMessageHeader());
} }
#if TRACE
Console.WriteLine("Setting result for reconnection");
#endif
var setting = _reconnection.TrySetResult(null); var setting = _reconnection.TrySetResult(null);
// _isInReconnectionState = false; // _isInReconnectionState = false;
_isConnected = true; _isConnected = true;
#if true
Console.WriteLine($"Set result for reconnection {setting}");
#endif
_reconnection = new TaskCompletionSource<Stream>(); _reconnection = new TaskCompletionSource<Stream>();
} }
private async Task MakeRecovery(string source) private async Task MakeRecovery(string source)
{ {
//TODO переделать реконнект //TODO переделать реконнект
#if TRACE
Console.WriteLine("Staring recovery from {0}", source);
#endif
lock (_reconnection) lock (_reconnection)
{ {
#if TRACE
Console.WriteLine("Got lock from {0}", source);
Console.WriteLine("Call OnDisconnected from {0}", source);
#endif
OnDisconnected?.Invoke(ConnectionId); OnDisconnected?.Invoke(ConnectionId);
} }
#if TRACE
Console.WriteLine("Waiting for reconnect from {0}", source);
#endif
if (!_reconnection.Task.IsCompleted && !_isConnected) if (!_reconnection.Task.IsCompleted && !_isConnected)
{ {
#if TRACE
Console.WriteLine("Current connection state {0} from {1}", _isConnected, source);
#endif
await _reconnection.Task; await _reconnection.Task;
} }
#if TRACE
Console.WriteLine("Reconnect finished from {0}", source);
#endif
} }
public void Dispose() public void Dispose()
{ {
#if TRACE
Console.WriteLine("Interaction module disposed");
#endif
_isActive = false; _isActive = false;
if (_currentReceiving is { IsCompleted: true }) if (_currentReceiving is { IsCompleted: true })
{ {
@@ -239,29 +199,17 @@ namespace mROA.Implementation
public async Task SingleReceive(CancellationToken Token = default) public async Task SingleReceive(CancellationToken Token = default)
{ {
#if TRACE
Console.WriteLine($"[{Id}] Single receive started");
#endif
var len = ReadMessageLength(); var len = ReadMessageLength();
var localSpan = _buffer[..len]; var localSpan = _buffer[..len];
await _ioStream.ReadExactlyAsync(localSpan, cancellationToken: Token); await _ioStream.ReadExactlyAsync(localSpan, cancellationToken: Token);
var message = _serializationToolkit.Deserialize<NetworkMessageHeader>(localSpan, Context); var message = _serializationToolkit.Deserialize<NetworkMessageHeader>(localSpan, Context);
#if TRACE
Console.WriteLine(
$"{DateTime.Now.TimeOfDay} [{Id}] Received Message {message.Id} - {message.MessageType}");
TransmissionConfig.TotalTransmittedBytes += len;
Console.WriteLine($"Total received bytes are {TransmissionConfig.TotalTransmittedBytes}");
#endif
MessageReceived(message); MessageReceived(message);
} }
public async Task LoopedReceive(CancellationToken token = default) public async Task LoopedReceive(CancellationToken token = default)
{ {
#if TRACE
Console.WriteLine("LoopedReceive started");
#endif
while (token.IsCancellationRequested == false && IsConnected) while (token.IsCancellationRequested == false && IsConnected)
{ {
await SingleReceive(token); await SingleReceive(token);
@@ -270,31 +218,11 @@ namespace mROA.Implementation
public async Task Send(NetworkMessageHeader message, CancellationToken token = default) public async Task Send(NetworkMessageHeader message, CancellationToken token = default)
{ {
try var rawMessage = _serializationToolkit.Serialize(message, Context);
{ var header = BitConverter.GetBytes((ushort)rawMessage.Length).AsMemory(0, sizeof(ushort));
var rawMessage = _serializationToolkit.Serialize(message, Context);
var header = BitConverter.GetBytes((ushort)rawMessage.Length).AsMemory(0, sizeof(ushort));
#if TRACE await _ioStream.WriteAsync(header, token);
Console.WriteLine( await _ioStream.WriteAsync(rawMessage, token);
$"{DateTime.Now.TimeOfDay} [{Id}] Posting Message {message.Id} - {message.MessageType}");
TransmissionConfig.TotalTransmittedBytes += rawMessage.Length;
Console.WriteLine($"Total received bytes are {TransmissionConfig.TotalTransmittedBytes}");
#endif
await _ioStream.WriteAsync(header, token);
await _ioStream.WriteAsync(rawMessage, token);
#if TRACE
Console.WriteLine(
$"{DateTime.Now.TimeOfDay} [{Id}] Posting finished {message.Id} - {message.MessageType}");
#endif
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
} }
public async Task SendFromChannel(ChannelReader<NetworkMessageHeader> channel, public async Task SendFromChannel(ChannelReader<NetworkMessageHeader> channel,