Skip to content

Commit

Permalink
Merge pull request #20 from arup-group/dev
Browse files Browse the repository at this point in the history
Implemented minor fix to more reliable grouping of objects into layers by type
  • Loading branch information
nic-burgers-arup committed Sep 4, 2020
2 parents 3c9d356 + 7a8111c commit edae8e2
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 27 deletions.
4 changes: 2 additions & 2 deletions SpeckleGSA/Properties/AssemblyInfo.cs
Expand Up @@ -29,5 +29,5 @@
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.11.1.0")]
[assembly: AssemblyFileVersion("0.11.1.0")]
[assembly: AssemblyVersion("0.11.1.1")]
[assembly: AssemblyFileVersion("0.11.1.1")]
2 changes: 0 additions & 2 deletions SpeckleGSA/Receiver.cs
Expand Up @@ -361,8 +361,6 @@ private Task ProcessObjectsForLayer(GSATargetLayer layer)
var streamId = tuple.Item1;
var obj = tuple.Item2;
Debug.WriteLine("Processing " + t.Name + " " + " AppId " + obj.ApplicationId + " on thread " + Thread.CurrentThread.ManagedThreadId);
var applicationId = obj.ApplicationId;
if (string.IsNullOrEmpty(applicationId))
Expand Down
17 changes: 10 additions & 7 deletions SpeckleGSA/Sender.cs
Expand Up @@ -14,13 +14,13 @@ public class Sender : BaseReceiverSender
{
private readonly Dictionary<string, ISpeckleGSASender> Senders = new Dictionary<string, ISpeckleGSASender>();

private Dictionary<Type, List<Type>> FilteredReadTypePrereqs = new Dictionary<Type, List<Type>>();
private readonly Dictionary<Type, List<Type>> FilteredReadTypePrereqs = new Dictionary<Type, List<Type>>();
public Dictionary<Type, string> StreamMap = new Dictionary<Type, string>();

//These need to be accessed using a lock
private object traversedSerialisedLock = new object();
private Dictionary<Type, List<object>> currentObjects = new Dictionary<Type, List<object>>();
private List<Type> traversedSerialisedTypes = new List<Type>();
private readonly Dictionary<Type, List<object>> currentObjects = new Dictionary<Type, List<object>>();
private readonly List<Type> traversedSerialisedTypes = new List<Type>();

/// <summary>
/// Initializes sender.
Expand Down Expand Up @@ -194,7 +194,10 @@ public void Trigger()
foreach (var dict in gsaStaticObjects)
{
var allObjects = dict.GetAll();
foreach (var t in allObjects.Keys)
//Ensure alphabetical order here as this has a bearing on the order of the layers when it's sent, and therefore the order of
//the layers as displayed in GH. Note the type names here are the GSA ones (e.g. GSAGravityLoading) not the StructuralClasses ones
var sortedKeys = allObjects.Keys.OrderBy(k => k.Name);
foreach (var t in sortedKeys)
{
if (!currentObjects.ContainsKey(t))
{
Expand All @@ -204,7 +207,7 @@ public void Trigger()
}
}

if (!changeDetected)
if (!changeDetected)
{
Status.ChangeStatus("Finished sending", 100);
IsBusy = false;
Expand Down Expand Up @@ -254,7 +257,7 @@ public void Trigger()
// Send package
Status.ChangeStatus("Sending to Server");

Parallel.ForEach(streamBuckets, kvp =>
foreach (var kvp in streamBuckets)
{
Status.ChangeStatus("Sending to stream: " + Senders[kvp.Key].StreamID);

Expand All @@ -264,7 +267,7 @@ public void Trigger()

Senders[kvp.Key].UpdateName(streamName);
Senders[kvp.Key].SendGSAObjects(kvp.Value);
});
}

duration = DateTime.Now - startTime;
Status.AddMessage("Duration of sending to Speckle: " + duration.ToString(@"hh\:mm\:ss"));
Expand Down
15 changes: 1 addition & 14 deletions SpeckleGSAProxy/GSACache.cs
Expand Up @@ -16,16 +16,10 @@ public class GSACache : IGSACache, IGSACacheForKit, IGSACacheForTesting
//private object recordsLock = new object();
//private object provisionalsLock = new object();

private object syncLock = new object();
private readonly object syncLock = new object();

private T ExecuteWithLock<T>(Func<T> f)
{
var stackTrace = new StackTrace();
var callingMethodName = ((stackTrace.GetFrames().Count() >= 2) ? stackTrace.GetFrames()[1].GetMethod().Name : stackTrace.GetFrames().Last().GetMethod().Name);
//if (!callingMethodName.Equals("AssignSpeckleObject"))
//{
// Debug.WriteLine("Lock asked for on thread: " + Thread.CurrentThread.ManagedThreadId + " method " + callingMethodName);
//}
lock (syncLock)
{
var ret = f();
Expand All @@ -35,19 +29,12 @@ private T ExecuteWithLock<T>(Func<T> f)

private void ExecuteWithLock(Action a)
{
var stackTrace = new StackTrace();
var callingMethodName = ((stackTrace.GetFrames().Count() >= 2) ? stackTrace.GetFrames()[1].GetMethod().Name : stackTrace.GetFrames().Last().GetMethod().Name);
//if (!callingMethodName.Equals("AssignSpeckleObject"))
//{
// Debug.WriteLine("Lock asked for on thread: " + Thread.CurrentThread.ManagedThreadId + " method " + callingMethodName);
//}
lock (syncLock)
{
a();
}
}

//private readonly List<GSACacheRecord> records = new List<GSACacheRecord>();
private ReadOnlyCollection<GSACacheRecord> records => recordsByKeyword.SelectMany(k => k.Value).ToList().AsReadOnly();

//There could be multiple entries at the same index - namely, a previous and a latest
Expand Down
4 changes: 2 additions & 2 deletions SpeckleGSAUI/Properties/AssemblyInfo.cs
Expand Up @@ -51,5 +51,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("0.11.1.0")]
[assembly: AssemblyFileVersion("0.11.1.0")]
[assembly: AssemblyVersion("0.11.1.1")]
[assembly: AssemblyFileVersion("0.11.1.1")]

0 comments on commit edae8e2

Please sign in to comment.