aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2017-12-27 19:13:23 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-12-27 19:13:23 +0200
commit8b4e9bff64d712c3dc35a05278fddbbf7814c2ad (patch)
tree7d74c6275294e0d7f30d63f33049f7d82a6eed98 /Software
parent47d7120b81dd646ed9b18740c9cc87a7a33a7c58 (diff)
downloadTango-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')
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java2
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java8
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/adapters/TcpTransportAdapter.java49
-rw-r--r--Software/DB/Tango.mdfbin8388608 -> 75497472 bytes
-rw-r--r--Software/DB/Tango_log.ldfbin8388608 -> 8388608 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Synchronization/ViewModels/DirectSynchronizationViewVM.cs2
-rw-r--r--Software/Visual_Studio/Tango.Integration/Services/ExternalBridgeScanner.cs3
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs42
-rw-r--r--Software/Visual_Studio/Tango.Transport/TransportAdapterBase.cs2
-rw-r--r--Software/Visual_Studio/Tango.Transport/TransporterBase.cs10
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
index 25f73c7e6..0225fcafe 100644
--- a/Software/DB/Tango.mdf
+++ b/Software/DB/Tango.mdf
Binary files differ
diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf
index 3a4e11874..e6cf1ee91 100644
--- a/Software/DB/Tango_log.ldf
+++ b/Software/DB/Tango_log.ldf
Binary files differ
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)