diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-12-27 19:13:23 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2017-12-27 19:13:23 +0200 |
| commit | 8b4e9bff64d712c3dc35a05278fddbbf7814c2ad (patch) | |
| tree | 7d74c6275294e0d7f30d63f33049f7d82a6eed98 /Software | |
| parent | 47d7120b81dd646ed9b18740c9cc87a7a33a7c58 (diff) | |
| download | Tango-8b4e9bff64d712c3dc35a05278fddbbf7814c2ad.tar.gz Tango-8b4e9bff64d712c3dc35a05278fddbbf7814c2ad.zip | |
Fixed an issue with keep alive blocking pulling thread.
Implemented the new TCP reading for java.
Modified accuracy of date time on SQLServer.
Diffstat (limited to 'Software')
10 files changed, 64 insertions, 54 deletions
diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java index 6d5667ada..e3335ad92 100644 --- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java +++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java @@ -18,7 +18,7 @@ import io.reactivex.Completable; */ public abstract class TransportAdapterBase implements ITransportAdapter { - protected static final int MAX_BUFFER_SIZE = 1024 * 1024 * 10; //10 MB. + protected static final int MAX_BUFFER_SIZE = 1024; //10 MB. private boolean isAuthenticated; private String address; private Event<TransportComponentState> stateChangedEvent; diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java index 5b410d22c..92ecf1220 100644 --- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java +++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java @@ -735,11 +735,11 @@ public abstract class TransporterBase implements ITransporter if (container.getType() == MessageType.KeepAliveRequest) { XLog.i("Submitting keep alive response..."); - sendResponse(MessageFactory.createTangoMessage(KeepAliveResponse.class, container.getToken())).subscribe(() -> + sendResponse(MessageFactory.createTangoMessage(KeepAliveResponse.class, container.getToken())).observeOn(Schedulers.newThread()).subscribe(() -> { }, (ex) -> { - ex.printStackTrace(); + //ex.printStackTrace(); }); } else @@ -775,7 +775,7 @@ public abstract class TransporterBase implements ITransporter while (state == TransportComponentState.Connected) { - this.<KeepAliveRequest, KeepAliveResponse>sendRequest(MessageFactory.createTangoMessage(KeepAliveRequest.class), Period.seconds(10)).subscribe((x) -> + this.<KeepAliveRequest, KeepAliveResponse>sendRequest(MessageFactory.createTangoMessage(KeepAliveRequest.class), Period.seconds(5)).subscribe((x) -> { }, (ex) -> @@ -787,7 +787,7 @@ public abstract class TransporterBase implements ITransporter }); - SystemClock.sleep(10000); + SystemClock.sleep(5000); } } diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java index f2e7a83a8..bbec3501a 100644 --- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java +++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java @@ -100,7 +100,8 @@ public class TcpTransportAdapter extends TransportAdapterBase XLog.i("TCP adapter connected..."); x.onComplete(); } - } catch (Exception e) + } + catch (Exception e) { XLog.e("Could not connect the TCP adapter."); x.onError(e); @@ -123,7 +124,8 @@ public class TcpTransportAdapter extends TransportAdapterBase { socket.getOutputStream().close(); socket.close(); - } catch (Exception e) + } + catch (Exception e) { //Ignore further disposing attempts failure. } @@ -131,7 +133,8 @@ public class TcpTransportAdapter extends TransportAdapterBase XLog.i("TCP adapter disconnected."); x.onComplete(); } - } catch (IOException e) + } + catch (IOException e) { XLog.e("Could not disconnect the TCP adapter."); XLog.e(e); @@ -149,7 +152,8 @@ public class TcpTransportAdapter extends TransportAdapterBase try { socket.getOutputStream().write(postProcessBuffer(data)); - } catch (IOException e) + } + catch (IOException e) { onFailed(e); } @@ -177,12 +181,12 @@ public class TcpTransportAdapter extends TransportAdapterBase { byte[] data = new byte[stream.available()]; int read = stream.read(data); - + if (read == -1) { throw new SocketException("Error reading from TCP adapter."); } - + onDataAvailable(data); } } @@ -191,34 +195,31 @@ public class TcpTransportAdapter extends TransportAdapterBase if (stream.available() > 4) { byte[] size = new byte[4]; - + int read = stream.read(size, 0, size.length); - + if (read == -1) { throw new SocketException("Error reading from TCP adapter."); } - + int expectedSize = ByteBuffer.wrap(size).order(ByteOrder.LITTLE_ENDIAN).getInt(); - - while (stream.available() < expectedSize) + + byte[] data = new byte[expectedSize]; + read = 0; + + while (read < expectedSize) { - SystemClock.sleep(10); + read += stream.read(data, read, Math.min(stream.available(), expectedSize - read)); + + SystemClock.sleep(2); if (getState() != TransportComponentState.Connected) { break; } } - - byte[] data = new byte[expectedSize]; - read = stream.read(data); - - if (read == -1) - { - throw new SocketException("Error reading from TCP adapter."); - } - + onDataAvailable(data); } } @@ -226,7 +227,8 @@ public class TcpTransportAdapter extends TransportAdapterBase SystemClock.sleep(10); } - } catch (Exception e) + } + catch (Exception e) { onFailed(e); } @@ -243,7 +245,8 @@ public class TcpTransportAdapter extends TransportAdapterBase { socket.setReceiveBufferSize(MAX_BUFFER_SIZE); socket.setSendBufferSize(MAX_BUFFER_SIZE); - } catch (SocketException e) + } + catch (SocketException e) { e.printStackTrace(); } diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf Binary files differindex 25f73c7e6..0225fcafe 100644 --- a/Software/DB/Tango.mdf +++ b/Software/DB/Tango.mdf diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf Binary files differindex 3a4e11874..e6cf1ee91 100644 --- a/Software/DB/Tango_log.ldf +++ b/Software/DB/Tango_log.ldf diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs index 7d21bb487..3f8772f0e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs @@ -170,7 +170,7 @@ namespace Tango.MachineStudio.Synchronization.ViewModels ApplicationManager.ConnectedMachine.UseKeepAlive = false; - var response = await ApplicationManager.ConnectedMachine.SendRequest<DirectSynchronizationRequest, DirectSynchronizationResponse>(new DirectSynchronizationRequest(), TimeSpan.FromSeconds(30)); + var response = await ApplicationManager.ConnectedMachine.SendRequest<DirectSynchronizationRequest, DirectSynchronizationResponse>(new DirectSynchronizationRequest(), TimeSpan.FromSeconds(60)); using (_notification.PushTaskItem("Generating temporary files...")) { diff --git a/Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs b/Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs index fe7260a02..12efb1506 100644 --- a/Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs +++ b/Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs @@ -75,9 +75,10 @@ namespace Tango.Integration.Services ExternalBridgeUdpDiscoveryPacket packet = ExternalBridgeUdpDiscoveryPacket.Parser.ParseFrom(ClientRequestData); - ExternalBridgeClient newMachine = new ExternalBridgeClient(packet.SerialNumber, ClientEp.Address.ToString()); if (!AvailableMachines.ToList().Exists(x => x.SerialNumber == packet.SerialNumber)) { + ExternalBridgeClient newMachine = new ExternalBridgeClient(packet.SerialNumber, ClientEp.Address.ToString()); + ThreadsHelper.InvokeUINow(() => { AvailableMachines.Add(newMachine); diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs index 1e897f85a..08d3ef1d6 100644 --- a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs +++ b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs @@ -179,10 +179,13 @@ namespace Tango.Transport.Adapters int expectedSize = BitConverter.ToInt32(size, 0); byte[] data = new byte[expectedSize]; + int read = 0; - while (_socket.Available < expectedSize) + while (read < expectedSize) { - Thread.Sleep(10); + read += _socket.GetStream().Read(data, read, Math.Min(_socket.Available, expectedSize - read)); + + Thread.Sleep(2); if (State != TransportComponentState.Connected) { @@ -190,7 +193,6 @@ namespace Tango.Transport.Adapters } } - _socket.GetStream().Read(data, 0, data.Length); OnDataAvailable(data); } } @@ -198,24 +200,24 @@ namespace Tango.Transport.Adapters Thread.Sleep(10); counter++; - if (counter >= 200) - { - try - { - if (_socket.Client.Poll(1, SelectMode.SelectRead) && _socket.Client.Available == 0) - { - OnFailed(LogManager.Log(new TimeoutException("Client disconnected."))); - return; - } - } - catch (SocketException ex) - { - OnFailed(LogManager.Log(ex)); - return; - } + //if (counter >= 200) + //{ + // try + // { + // if (_socket.Client.Poll(1, SelectMode.SelectRead) && _socket.Client.Available == 0) + // { + // OnFailed(LogManager.Log(new TimeoutException("Client disconnected."))); + // return; + // } + // } + // catch (SocketException ex) + // { + // OnFailed(LogManager.Log(ex)); + // return; + // } - counter = 0; - } + // counter = 0; + //} } } catch (Exception ex) diff --git a/Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs b/Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs index 04ecdc394..100990d0e 100644 --- a/Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs +++ b/Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs @@ -13,7 +13,7 @@ namespace Tango.Transport /// <seealso cref="Tango.Transport.ITransportAdapter" /> public abstract class TransportAdapterBase : ITransportAdapter { - protected const int MAX_BUFFER_SIZE = 1024 * 1024 * 10; //10 MB. + protected const int MAX_BUFFER_SIZE = 1024; //10 MB. #region Events diff --git a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs index 547b11e7c..aa481007c 100644 --- a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs +++ b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs @@ -568,6 +568,7 @@ namespace Tango.Transport { LogManager.Log("Parsing inner response message and setting pending request task result..."); request.SetResult(OnParseTangoMessage(data.Value), true); + LogManager.Log("Message enquirer released..."); } else { @@ -651,17 +652,20 @@ namespace Tango.Transport /// <summary> /// Responsible for sending keep alive messages. /// </summary> - private async void KeepAliveThreadMethod() + private void KeepAliveThreadMethod() { while (State == TransportComponentState.Connected) { try { - Thread.Sleep(10000); + Thread.Sleep(5000); if (UseKeepAlive) { - var response = await SendRequest<KeepAliveRequest, KeepAliveResponse>(new KeepAliveRequest(), TimeSpan.FromSeconds(10)); + var task = SendRequest<KeepAliveRequest, KeepAliveResponse>(new KeepAliveRequest(), TimeSpan.FromSeconds(5)); + task.Wait(); + var response = task.Result; + } } catch (TimeoutException) |
