/// <summary>
        /// Exposed method for users to call when trying to download the meta data of the Streams the current
        /// logged in user is able to access. Use this to get the IDs of the streams you would later want to start
        /// receiving or use the rest of the data to populate your UI with data describing the Streams that are
        /// available.
        /// </summary>
        /// <param name="callBack">A method callback which takes a <c>SpeckleStream</c> array.</param>
        /// <returns>An async Task which can be awaited with a coroutine or just ignored.</returns>
        /// <remarks>If download was successful, the resulting array is passed back. If failed, null
        /// is passed. Need to be using the <c>SpeckleCore</c> namespace to access this type.</remarks>
        public virtual async Task GetAllStreamMetaDataForUserAsync(Action <SpeckleStream[]> callBack)
        {
            if (loggedInUser == null)
            {
                throw new UnauthorizedAccessException("Need to be logged in before getting stream meta data.");
            }

            SpeckleApiClient userStreamsClient = new SpeckleApiClient(serverUrl.Trim());

            userStreamsClient.AuthToken = loggedInUser.Apitoken;

            ResponseStream streamsGet = await userStreamsClient.StreamsGetAllAsync(null);

            if (streamsGet == null)
            {
                Debug.LogError("Could not get streams for user");

                callBack?.Invoke(null);
            }
            else
            {
                List <SpeckleStream> streams = streamsGet.Resources;

                Debug.Log("Got " + streams.Count + " streams for user");

                callBack?.Invoke(streams.ToArray());
            }
        }
Esempio n. 2
0
        private void AddAccountFromRedirect(string redirect)
        {
            var myString = Uri.UnescapeDataString(redirect);

            var splitRes = myString.Replace("?token=", "").Split(new[] { ":::" }, StringSplitOptions.None);
            var token    = splitRes[0];
            //var serverUrl = splitRes[1];

            var apiCl = new SpeckleApiClient(_apiUri)
            {
                AuthToken = token
            };
            var res = apiCl.UserGetAsync().Result;

            var apiToken = res.Resource.Apitoken;
            var email    = res.Resource.Email;

            SaveOrUpdateAccount(new Account()
            {
                RestApi = apiCl.BaseUrl, Email = email, Token = apiToken
            });

            Dispatcher.Invoke(() =>
            {
                //defaultServer = "";
                showSigninsuccess = true;
                isInRequestFlow   = false;
                LoadAccounts();
            });
        }
        /// <summary>
        /// Exposed method for users to call when trying to download the meta data of the Projects the current
        /// logged in user is able to access.
        /// </summary>
        /// <param name="callBack">A method callback which takes a <c>Project</c> array.</param>
        /// <returns>An async Task which can be awaited with a coroutine or just ignored.</returns>
        /// <remarks>If download was successful, the resulting array is passed back. If failed, null
        /// is passed. Need to be using the <c>SpeckleCore</c> namespace to access this type.</remarks>
        public virtual async Task GetAllProjectMetaDataForUserAsync(Action <Project[]> callBack)
        {
            if (loggedInUser == null)
            {
                throw new UnauthorizedAccessException("Need to be logged in before getting project data.");
            }

            SpeckleApiClient userProjectsClient = new SpeckleApiClient(serverUrl.Trim());

            userProjectsClient.AuthToken = loggedInUser.Apitoken;

            ResponseProject projectsGet = await userProjectsClient.ProjectGetAllAsync();

            if (projectsGet == null)
            {
                Debug.LogError("Could not get projects for user");

                callBack?.Invoke(null);
            }
            else
            {
                List <Project> projects = projectsGet.Resources;

                Debug.Log("Got " + projects.Count + " projects for user");

                callBack?.Invoke(projects.ToArray());
            }
        }
Esempio n. 4
0
        static async void MainAsync(string[] args)
        {
            Console.WriteLine("Done.");

            Console.WriteLine();
            Console.WriteLine("Setting up client.");

            SpeckleApiClient myClient = new SpeckleApiClient();

            myClient.BaseUrl = "http://10.211.55.2:3000/api/v1";

            var authToken = "Run test accounts to set a proper auth token";

            myClient.AuthToken = authToken;

            await TestAccounts(myClient);

            //await TestProjects( myClient );

            //await TestClients( myClient );

            //await TestComments( myClient );

            await TestStreams(myClient);

            //await TestObjects( myClient );

            Console.WriteLine();
            Console.WriteLine("Press any key to close");
            Console.ReadLine();
        }
Esempio n. 5
0
        /// <summary>
        /// Gets a stream and its objects, in bulk. This is NOT recommended for large streams.
        /// </summary>
        /// <param name="_streamId"></param>
        static void GetStream(string _streamId = null)
        {
            Console.WriteLine("Hello Speckle! We will now try and get a stream.");
            var account = LocalContext.GetAccountByEmailAndRestApi("*****@*****.**", "https://hestia.speckle.works/api");

            var streamId = "";

            if (_streamId == null)
            {
                Console.WriteLine("What stream id should we get?");
                streamId = Console.ReadLine();
            }
            else
            {
                streamId = _streamId;
            }

            var client = new SpeckleApiClient(account.RestApi, false, "console_app");

            client.AuthToken = account.Token;

            var stream  = client.StreamGetAsync(streamId, "").Result.Resource;
            var objects = client.StreamGetObjectsAsync(streamId, "fields=hash,type").Result; // restricting to just a few things

            Console.WriteLine("This is the stream:");
            Console.WriteLine(stream.ToJson());
            Console.WriteLine();
            Console.WriteLine("Press any key to continue.");
            Console.ReadLine();
            Console.WriteLine("These are the objects:");
            Console.WriteLine(objects.ToJson());
            Console.WriteLine();
            Console.WriteLine("Press any key to continue.");
            Console.ReadLine();
        }
        public RhinoSender(string _payload, Interop _Context)
        {
            Context = _Context;

            dynamic InitPayload = JsonConvert.DeserializeObject <ExpandoObject>(_payload);

            Client = new SpeckleApiClient(( string )InitPayload.account.restApi, true);

            StreamName = ( string )InitPayload.streamName;

            SetClientEvents();
            SetRhinoEvents();
            SetTimers();

            Display         = new SpeckleDisplayConduit();
            Display.Enabled = true;

            Context.NotifySpeckleFrame("set-gl-load", "", "true");

            Client.IntializeSender(( string )InitPayload.account.apiToken, Context.GetDocumentName(), "Rhino", Context.GetDocumentGuid())
            .ContinueWith(res =>
            {
                StreamId           = Client.Stream.StreamId;
                Client.Stream.Name = StreamName;

                Context.NotifySpeckleFrame("set-gl-load", "", "false");
                Context.NotifySpeckleFrame("client-add", StreamId, JsonConvert.SerializeObject(new { stream = Client.Stream, client = Client }));
                Context.UserClients.Add(this);

                InitTrackedObjects(InitPayload);
                DataSender.Start();
            });
        }
        /// <summary>
        /// Exposed method for users to call when trying to login to a Speckle server via code.
        /// </summary>
        /// <param name="email">The email of the account you wish to login with.</param>
        /// <param name="password">The corresponding password for the account.</param>
        /// <param name="callBack">A method callback which takes a <c>User</c>.</param>
        /// <returns>An async Task which can be awaited with a coroutine or just ignored.</returns>
        /// <remarks>If login was successful, the resulting user object is passed back. If failed, null
        /// is passed. Need to be using the <c>SpeckleCore</c> namespace to access this type.</remarks>
        public virtual async Task LoginAsync(string email, string password, Action <User> callBack)
        {
            if (string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(password))
            {
                throw new InvalidOperationException("The email and password arguments both need to be provided if you wish to login.");
            }

            SpeckleApiClient loginClient = new SpeckleApiClient(serverUrl.Trim());

            User user = new User {
                Email = email.Trim(), Password = password.Trim()
            };

            Debug.Log("Atempting login");

            ResponseUser userGet = await loginClient.UserLoginAsync(user);

            if (userGet == null)
            {
                Debug.LogError("Could not login");
                callBack?.Invoke(null);
            }
            else
            {
                loggedInUser = userGet.Resource;
                Debug.Log("Logged in as " + loggedInUser.Name + " " + loggedInUser.Surname);

                loginClient?.Dispose(true);

                callBack?.Invoke(loggedInUser);
            }
        }
Esempio n. 8
0
        public override bool Read(GH_IReader reader)
        {
            try
            {
                var serialisedClient = reader.GetByteArray("speckleclient");
                var copy             = serialisedClient;
                using (var ms = new MemoryStream())
                {
                    ms.Write(serialisedClient, 0, serialisedClient.Length);
                    ms.Seek(0, SeekOrigin.Begin);
                    mySender = (SpeckleApiClient) new BinaryFormatter().Deserialize(ms);
                    var x = mySender;
                    RestApi       = mySender.BaseUrl;
                    StreamId      = mySender.StreamId;
                    WasSerialised = true;
                }

                reader.TryGetBoolean("remotecontroller", ref EnableRemoteControl);
                reader.TryGetBoolean("manualmode", ref ManualMode);
            }
            catch (Exception err)
            {
                throw err;
            }
            return(base.Read(reader));
        }
Esempio n. 9
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            SpeckleApiClient client = null;
            var obj = JValue.Load(reader);

            try
            {
                var bytes = (byte[])obj;

                if (bytes != null)
                {
                    using (MemoryStream input = new MemoryStream(bytes))
                        using (DeflateStream deflateStream = new DeflateStream(input, CompressionMode.Decompress))
                            using (MemoryStream output = new MemoryStream())
                            {
                                deflateStream.CopyTo(output);
                                deflateStream.Close();
                                output.Seek(0, SeekOrigin.Begin);

                                BinaryFormatter bformatter = new BinaryFormatter();
                                client = (SpeckleApiClient)bformatter.Deserialize(output);
                            }
                }
            }
            catch  {
                // null/empty receiver
            }
            return(client);
        }
        public override object ReadJson(DNJ.JsonReader reader, Type objectType, object existingValue, DNJ.JsonSerializer serializer)
        {
            // Fixes https://github.com/speckleworks/SpeckleDynamo/issues/61
            SpeckleCore.SpeckleInitializer.Initialize();
            // Carry on as usual (NOTE: we need to clean this up)
            SpeckleApiClient client = null;
            var obj = DNJ.Linq.JValue.Load(reader);

            try
            {
                var bytes = (byte[])obj;

                if (bytes != null)
                {
                    using (MemoryStream input = new MemoryStream(bytes))
                        using (DeflateStream deflateStream = new DeflateStream(input, CompressionMode.Decompress))
                            using (MemoryStream output = new MemoryStream())
                            {
                                deflateStream.CopyTo(output);
                                deflateStream.Close();
                                output.Seek(0, SeekOrigin.Begin);

                                BinaryFormatter bformatter = new BinaryFormatter();
                                client            = (SpeckleApiClient)bformatter.Deserialize(output);
                                client.ClientType = "Dynamo";
                            }
                }
            }
            catch  {
                // null/empty receiver
            }
            return(client);
        }
        /// <summary>
        /// All clients need to be initialized which creates an instance of an internal speckle client object,
        /// authenticates against the server and provides a manager object to receive inspector arguments from.
        /// </summary>
        /// <param name="manager">The manager instance that provides inspector values for this client.</param>
        /// <param name="url">The url of the speckle server to connect to.</param>
        /// <param name="apiToken">The authentication token of the user to connect as.</param>
        /// <returns>An async <c>Task</c> of the new operation.</returns>
        public override async Task InitializeClient(SpeckleUnityManager manager, string url, string apiToken)
        {
            if (streamRoot == null)
            {
                streamRoot      = new GameObject().transform;
                streamRoot.name = "Default Stream Root: " + streamID;
            }

            this.manager = manager;

            client         = new SpeckleApiClient(url.Trim(), true);
            client.BaseUrl = url.Trim();
            RegisterClient();

            await client.IntializeReceiver(streamID, Application.productName, "Unity", Guid.NewGuid().ToString(), apiToken);

            Debug.Log("Initialized stream: " + streamID);


            deserializedStreamObjects = new List <object> ();
            layerLookup         = new Dictionary <Layer, Transform> ();
            speckleObjectLookup = new Dictionary <GameObject, SpeckleObject> ();
            numbers             = new List <float> ();
            strings             = new List <string> ();
            meshes        = new List <Mesh> ();
            meshRenderers = new List <MeshRenderer> ();

            //after connected, call update global to get geometry
            await UpdateGlobal();
        }
        public override bool Read(GH_IReader reader)
        {
            try
            {
                Debug.WriteLine("Trying to read client!");
                var serialisedClient = reader.GetByteArray("speckleclient");
                using (var ms = new MemoryStream())
                {
                    ms.Write(serialisedClient, 0, serialisedClient.Length);
                    ms.Seek(0, SeekOrigin.Begin);
                    myReceiver = (SpeckleApiClient) new BinaryFormatter().Deserialize(ms);

                    StreamId  = myReceiver.StreamId;
                    AuthToken = myReceiver.AuthToken;
                    RestApi   = myReceiver.BaseUrl;

                    InitReceiverEventsAndGlobals();
                }
            }
            catch
            {
                Debug.WriteLine("No client was present.");
            }
            return(base.Read(reader));
        }
Esempio n. 13
0
        public override bool Read(GH_IReader reader)
        {
            try
            {
                var serialisedClient = reader.GetByteArray("speckleclient");
                var copy             = serialisedClient;
                using (var ms = new MemoryStream())
                {
                    ms.Write(serialisedClient, 0, serialisedClient.Length);
                    ms.Seek(0, SeekOrigin.Begin);
                    Client            = (SpeckleApiClient) new BinaryFormatter().Deserialize(ms);
                    Client.ClientType = "Grasshopper";
                    RestApi           = Client.BaseUrl;
                    StreamId          = Client.StreamId;
                    WasSerialised     = true;
                }

                reader.TryGetBoolean("remotecontroller", ref EnableRemoteControl);
                reader.TryGetBoolean("manualmode", ref ManualMode);
                reader.TryGetBoolean("DebouncingDisabled", ref DebouncingDisabled);
            }
            catch (Exception err)
            {
                this.AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Failed to reinitialise sender.");
            }
            return(base.Read(reader));
        }
        private void ChangeStreamId(object sender, System.Timers.ElapsedEventArgs e)
        {
            Debug.WriteLine("Changing streams to {0}.", StreamId);
            Client = new SpeckleApiClient(RestApi, true);

            InitReceiverEventsAndGlobals();

            Client.IntializeReceiver(StreamId, Document.DisplayName, "Grasshopper", Document.DocumentID.ToString(), AuthToken);
        }
Esempio n. 15
0
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            if (Paused)
            {
                SetObjects(DA);
                return;
            }

            string inputId = null;

            DA.GetData(0, ref inputId);

            if (inputId == null && StreamId == null)
            {
                return;
            }

            if (inputId != StreamId)
            {
                Debug.WriteLine("Changing streams: {0} ::> {1}", inputId, StreamId);

                StreamId = inputId;

                if (myReceiver != null)
                {
                    myReceiver.Dispose(true);
                }

                myReceiver = new SpeckleApiClient(RestApi, true);

                InitReceiverEventsAndGlobals();

                myReceiver.IntializeReceiver(StreamId, Document.DisplayName, "Grasshopper", Document.DocumentID.ToString(), AuthToken);

                return;
            }

            if (myReceiver == null)
            {
                this.AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, "Receiver not intialised.");
                return;
            }

            if (!myReceiver.IsConnected)
            {
                return;
            }

            if (Expired)
            {
                Expired = false; UpdateGlobal(); return;
            }

            CalculateBoundingBox();
            ExpirePreview(true);
            SetObjects(DA);
        }
Esempio n. 16
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello Smelly Sockets");

            SelectedAccount = SpkConsole.Program.GetAccount();

            var spkClient_A = new SpeckleApiClient(SelectedAccount.RestApi, false, "console application");
            var spkClient_B = new SpeckleApiClient(SelectedAccount.RestApi, false, "console application");

            spkClient_A.AuthToken = SelectedAccount.Token;
            spkClient_B.AuthToken = SelectedAccount.Token;

            //gen streamid
            DummyStreamId = spkClient_A.StreamCreateAsync(new SpeckleStream()
            {
                Name = "WS Test"
            }).Result.Resource.StreamId;
            Console.WriteLine($"Created dummy stream: {DummyStreamId}. Press any key to continue stuff.");

            // Add event handlers and setup streamId on both ws clients. The event handlers just spit out what they get.
            spkClient_A.StreamId = DummyStreamId;
            spkClient_A.SetupWebsocket();
            spkClient_A.OnWsMessage += SpkClient_A_OnWsMessage;

            spkClient_B.StreamId = DummyStreamId;
            spkClient_B.SetupWebsocket();
            spkClient_B.OnWsMessage += SpkClient_B_OnWsMessage;


            Console.WriteLine("Waiting for 200ms, ensure connection actually happened. This is an issue with core, it doesn't expose a 'onwsconnection' event :/");
            Thread.Sleep(200);

            // Flop them in a room - this is important if you want to broadcast messages.
            spkClient_A.JoinRoom("stream", DummyStreamId);
            spkClient_B.JoinRoom("stream", DummyStreamId);

            // Same hack as above.
            Thread.Sleep(200);

            // Send some dummy broadcasts
            spkClient_A.BroadcastMessage("stream", DummyStreamId, new { customEventType = "update-mesh", data = "42" });
            spkClient_A.BroadcastMessage("stream", DummyStreamId, new { customEventType = "update-mesh-other", data = "wow" });

            spkClient_B.BroadcastMessage("stream", DummyStreamId, new { customEventType = "update-mesh-other", data = "wow" });
            spkClient_B.SendMessage(spkClient_A.ClientId, new { what = "This is a direct, 1-1 message from B to A." });


            Console.WriteLine("Press any key to continue testing the barebones approach!");

            BareBonesApproach();

            Console.WriteLine("Done. Press any key to continue.");
            spkClient_A.StreamDeleteAsync(DummyStreamId);
            Console.ReadLine();
        }
Esempio n. 17
0
        /// <summary>
        /// Clones the stream.
        /// </summary>
        /// <param name="restApi">Server address</param>
        /// <param name="apiToken">API token for account</param>
        /// <param name="streamID">Stream ID of stream to clone</param>
        /// <returns>Stream ID of the clone</returns>
        public static async Task <string> CloneStream(string restApi, string apiToken, string streamID)
        {
            SpeckleApiClient myClient = new SpeckleApiClient()
            {
                BaseUrl = restApi, AuthToken = apiToken
            };

            ResponseStreamClone response = await myClient.StreamCloneAsync(streamID);

            return(response.Clone.StreamId);
        }
Esempio n. 18
0
        /// <summary>
        /// Create SpeckleGSASender object.
        /// </summary>
        /// <param name="serverAddress">Server address</param>
        /// <param name="apiToken">API token</param>
        public StreamSender(string serverAddress, string apiToken)
        {
            this.apiToken = apiToken;

            apiClient = new SpeckleApiClient()
            {
                BaseUrl = serverAddress.ToString()
            };

            //SpeckleInitializer.Initialize();
            LocalContext.Init();
        }
Esempio n. 19
0
        /// <summary>
        /// Returns streams associated with account.
        /// </summary>
        /// <param name="restApi">Server address</param>
        /// <param name="apiToken">API token for account</param>
        /// <returns>List of tuple containing the name and the streamID of each stream</returns>
        public static async Task <List <SpeckleStream> > GetStreams(string restApi, string apiToken, ISpeckleAppMessenger messenger)
        {
            SpeckleApiClient myClient = new SpeckleApiClient()
            {
                BaseUrl = restApi, AuthToken = apiToken
            };
            var queryString = "limit=500&sort=-updatedAt&parent=&fields=name,streamId,parent";

            try
            {
                ResponseStream response = await myClient.StreamsGetAllAsync(queryString);

                List <SpeckleStream> ret = new List <SpeckleStream>();

                foreach (SpeckleStream s in response.Resources.Where(r => r.Parent == null))
                {
                    ret.Add(s);
                }

                return(ret);
            }
            catch (SpeckleException se)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to access stream list information from the server");
                    var context = new List <string>()
                    {
                        "Unable to access stream list information from the server",
                        "StatusCode=" + se.StatusCode, "ResponseData=" + se.Response, "Message=" + se.Message, "BaseUrl=" + restApi,
                        "Endpoint=StreamsGetAllAsync", "QueryString=\"" + queryString + "\""
                    };
                    if (se is SpeckleException <ResponseBase> && ((SpeckleException <ResponseBase>)se).Result != null)
                    {
                        var responseJson = ((SpeckleException <ResponseBase>)se).Result.ToJson();
                        context.Add("ResponseJson=" + responseJson);
                    }
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, se, context.ToArray());
                }
            }
            catch (Exception ex)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to access stream list information from the server");
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, ex, "Unable to access stream list information",
                                      "BaseUrl=" + restApi);
                }
            }
            return(null);
        }
Esempio n. 20
0
        public static async Task <SpeckleStream> GetStream(string restApi, string apiToken, string streamId, ISpeckleAppMessenger messenger)
        {
            SpeckleApiClient myClient = new SpeckleApiClient()
            {
                BaseUrl = restApi, AuthToken = apiToken
            };
            var queryString = "fields=streamId,name";

            try
            {
                var response = await myClient.StreamGetAsync(streamId, queryString);

                if (response != null && response.Success.HasValue && response.Success.Value &&
                    response.Resource != null && response.Resource.StreamId.Equals(streamId, StringComparison.InvariantCultureIgnoreCase))
                {
                    return(response.Resource);
                }
            }
            catch (SpeckleException se)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to access stream information for " + streamId);
                    var context = new List <string>()
                    {
                        "Unable to access stream information for " + streamId,
                        "StatusCode=" + se.StatusCode, "ResponseData=" + se.Response, "Message=" + se.Message, "BaseUrl=" + restApi,
                        "Endpoint=StreamGetAsync", "QueryString=\"" + queryString + "\""
                    };
                    if (se is SpeckleException <ResponseBase> && ((SpeckleException <ResponseBase>)se).Result != null)
                    {
                        var responseJson = ((SpeckleException <ResponseBase>)se).Result.ToJson();
                        context.Add("ResponseJson=" + responseJson);
                    }
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, se, context.ToArray());
                }
            }
            catch (Exception ex)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to access stream information for " + streamId);
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, ex, "Unable to access stream information",
                                      "BaseUrl=" + restApi, "StreamId" + streamId);
                }
            }
            return(null);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            if (Paused)
            {
                SetObjects(DA);
                return;
            }

            string inputId = null;

            DA.GetData(0, ref inputId);

            if (inputId == null && StreamId == null)
            {
                return;
            }

            if (inputId != StreamId)
            {
                Client?.Dispose(true);
                Client = null;

                StreamId = inputId;

                StreamIdChanger.Start();
                return;
            }

            if (Client == null)
            {
                this.AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, "Receiver not intialised.");
                return;
            }

            if (!Client.IsConnected)
            {
                return;
            }

            if (Expired)
            {
                Expired = false; UpdateGlobal(); return;
            }

            CalculateBoundingBox();
            ExpirePreview(true);
            SetObjects(DA);
        }
Esempio n. 22
0
        public static async Task <string> GetClientName(string restApi, string apiToken, ISpeckleAppMessenger messenger)
        {
            SpeckleApiClient myClient = new SpeckleApiClient()
            {
                BaseUrl = restApi, AuthToken = apiToken
            };

            ResponseUser user = null;

            try
            {
                user = await myClient.UserGetAsync();
            }
            catch (SpeckleException se)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to get user's name from server");
                    var context = new List <string>()
                    {
                        "Unable to get user's name from server",
                        "StatusCode=" + se.StatusCode, "ResponseData=" + se.Response, "Message=" + se.Message, "BaseUrl=" + restApi,
                        "Endpoint=UserGetAsync"
                    };
                    if (se is SpeckleException <ResponseBase> && ((SpeckleException <ResponseBase>)se).Result != null)
                    {
                        var responseJson = ((SpeckleException <ResponseBase>)se).Result.ToJson();
                        context.Add("ResponseJson=" + responseJson);
                    }
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, se, context.ToArray());
                    return("");
                }
            }
            catch (Exception ex)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to get user's name from server");
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, ex, "Unable to rename stream", "BaseUrl=" + restApi);
                    return("");
                }
            }
            if (user.Resource != null)
            {
                return(string.Join(" ", user.Resource.Name, user.Resource.Surname));
            }
            return("");
        }
Esempio n. 23
0
        public static async Task <bool> UpdateStreamName(string restApi, string apiToken, string streamId, string streamName, ISpeckleAppMessenger messenger)
        {
            SpeckleApiClient myClient = new SpeckleApiClient()
            {
                BaseUrl = restApi, AuthToken = apiToken
            };

            try
            {
                var response = await myClient.StreamUpdateAsync(streamId, new SpeckleStream()
                {
                    Name = streamName
                });

                return(response.Success.HasValue && response.Success.Value);
            }
            catch (SpeckleException se)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to update stream name for " + streamId);
                    var context = new List <string>()
                    {
                        "Unable to update stream name for " + streamId,
                        "StatusCode=" + se.StatusCode, "ResponseData=" + se.Response, "Message=" + se.Message, "BaseUrl=" + restApi
                    };
                    if (se is SpeckleException <ResponseBase> && ((SpeckleException <ResponseBase>)se).Result != null)
                    {
                        var responseJson = ((SpeckleException <ResponseBase>)se).Result.ToJson();
                        context.Add("ResponseJson=" + responseJson);
                    }
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, se, context.ToArray());
                }
                return(false);
            }
            catch (Exception ex)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to update stream name for " + streamId);
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, ex, "Unable to rename stream", "StreamId=" + streamId, "BaseUrl=" + restApi, "StreamName=" + streamName);
                }
                return(false);
            }
        }
Esempio n. 24
0
        /// <summary>
        /// Returns streams associated with account.
        /// </summary>
        /// <param name="restApi">Server address</param>
        /// <param name="apiToken">API token for account</param>
        /// <returns>List of tuple containing the name and the streamID of each stream</returns>
        public static async Task <List <Tuple <string, string> > > GetStreams(string restApi, string apiToken)
        {
            SpeckleApiClient myClient = new SpeckleApiClient()
            {
                BaseUrl = restApi, AuthToken = apiToken
            };

            ResponseStream response = await myClient.StreamsGetAllAsync("fields=name,streamId");

            List <Tuple <string, string> > ret = new List <Tuple <string, string> >();

            foreach (SpeckleStream s in response.Resources)
            {
                ret.Add(new Tuple <string, string>(s.Name, s.StreamId));
            }

            return(ret);
        }
    public void Init(string inStreamID)
    {
        Client = new SpeckleApiClient(restURL);

        //Assign events
        Client.OnReady     += Client_OnReady;
        Client.OnLogData   += Client_OnLogData;
        Client.OnWsMessage += Client_OnWsMessage;
        Client.OnError     += Client_OnError;

        //make sure convereter is loaded
        var hack = new ConverterHack();

        SpeckleObjects = new List <SpeckleObject>();

        StreamID = inStreamID;
        Client.IntializeReceiver(StreamID, "UnityTest", "Unity", "UnityGuid", authToken);
        UpdateGlobal();
    }
Esempio n. 26
0
        public SpeckleAdapter(SpeckleCore.Account speckleAccount, string speckleStreamId, string speckleStreamName = "Anonymous stream")
        {
            if (string.IsNullOrWhiteSpace(speckleStreamId))
            {
                BH.Engine.Reflection.Compute.RecordError("StreamId can't be null or empty.");
                return;
            }

            SpeckleStream SpeckleStream = new SpeckleStream()
            {
                StreamId = speckleStreamId, Name = speckleStreamName
            };

            SpeckleClient = new SpeckleApiClient()
            {
                BaseUrl = speckleAccount.RestApi, AuthToken = speckleAccount.Token, Stream = SpeckleStream, StreamId = SpeckleStream.StreamId
            };
            SpeckleClient.SetupWebsocket();
        }
Esempio n. 27
0
        /// <summary>
        /// Clones the stream.
        /// </summary>
        /// <param name="restApi">Server address</param>
        /// <param name="apiToken">API token for account</param>
        /// <param name="streamId">Stream ID of stream to clone</param>
        /// <returns>Stream ID of the clone</returns>
        public static async Task <string> CloneStream(string restApi, string apiToken, string streamId, ISpeckleAppMessenger messenger)
        {
            SpeckleApiClient myClient = new SpeckleApiClient()
            {
                BaseUrl = restApi, AuthToken = apiToken
            };

            try
            {
                ResponseStreamClone response = await myClient.StreamCloneAsync(streamId);

                return(response.Clone.StreamId);
            }
            catch (SpeckleException se)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to clone stream name for " + streamId);
                    var context = new List <string>()
                    {
                        "Unable to clone stream name for " + streamId,
                        "StatusCode=" + se.StatusCode, "ResponseData=" + se.Response, "Message=" + se.Message, "BaseUrl=" + restApi,
                        "Endpoint=StreamCloneAsync"
                    };
                    if (se is SpeckleException <ResponseBase> && ((SpeckleException <ResponseBase>)se).Result != null)
                    {
                        var responseJson = ((SpeckleException <ResponseBase>)se).Result.ToJson();
                        context.Add("ResponseJson=" + responseJson);
                    }
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, se, context.ToArray());
                }
            }
            catch (Exception ex)
            {
                if (messenger != null)
                {
                    messenger.Message(MessageIntent.Display, MessageLevel.Error, "Unable to clone stream name for " + streamId);
                    messenger.Message(MessageIntent.TechnicalLog, MessageLevel.Error, ex, "Unable to rename stream", "StreamId=" + streamId, "BaseUrl=" + restApi);
                }
            }
            return("");
        }
Esempio n. 28
0
        public RevitReceiver(string payload, Interop parent)
        {
            Context = parent;
            dynamic p = JsonConvert.DeserializeObject(payload);

            StreamId = (string)p.streamId;
            Client   = new SpeckleApiClient((string)p.account.restApi, true);

            Client.OnReady     += Client_OnReady;
            Client.OnLogData   += Client_OnLogData;
            Client.OnWsMessage += Client_OnWsMessage;
            Client.OnError     += Client_OnError;

            Client.IntializeReceiver((string)p.streamId,
                                     Context.GetDocumentName(),
                                     "Revit",
                                     Context.GetDocumentGuid(),
                                     (string)p.account.apiToken);

            Objects = new List <SpeckleObject>();
        }
Esempio n. 29
0
        public RhinoReceiver(string _payload, Interop _parent)
        {
            Context = _parent;
            dynamic payload = JsonConvert.DeserializeObject(_payload);

            StreamId = ( string )payload.streamId;

            Client = new SpeckleApiClient(( string )payload.account.restApi, true);

            Client.OnReady     += Client_OnReady;
            Client.OnLogData   += Client_OnLogData;
            Client.OnWsMessage += Client_OnWsMessage;
            Client.OnError     += Client_OnError;

            Client.IntializeReceiver(( string )payload.streamId, Context.GetDocumentName(), "Rhino", Context.GetDocumentGuid(), ( string )payload.account.token);

            Display         = new SpeckleDisplayConduit();
            Display.Enabled = true;

            Objects = new List <SpeckleObject>();
        }
Esempio n. 30
0
 public override bool Read(GH_IReader reader)
 {
     try
     {
         var serialisedClient = reader.GetByteArray("speckleclient");
         var copy             = serialisedClient;
         using (var ms = new MemoryStream())
         {
             ms.Write(serialisedClient, 0, serialisedClient.Length);
             ms.Seek(0, SeekOrigin.Begin);
             mySender = (SpeckleApiClient) new BinaryFormatter().Deserialize(ms);
             var x = mySender;
             RestApi  = mySender.BaseUrl;
             StreamId = mySender.StreamId;
         }
     }
     catch (Exception err)
     {
         throw err;
     }
     return(base.Read(reader));
 }