Beispiel #1
0
        private async void btnData_Click(object sender, EventArgs e)
        {
            lvData.Items.Clear();

            if (lvResults.SelectedItems == null)
            {
                MessageBox.Show("Must select an attribute for data retrieval!");
                return;
            }

            if (cboStreamType.SelectedItem == null)
            {
                MessageBox.Show("Must select a stream type for data retrieval!");
                return;
            }

            var url = new StringBuilder();

            url.AppendFormat(@"{0}/streams/{1}/{2}", baseUrl, lvResults.SelectedItems[0].SubItems[2].Text, cboStreamType.SelectedItem.ToString());

            JObject jobj = await client.GetAsync(url.ToString());

            lvData.BeginUpdate();
            for (int i = 0; i < jobj["Items"].Count(); i++)
            {
                DataItemListViewItem lvItem;
                if (cboStreamType.SelectedItem.ToString().ToUpper().Equals("SUMMARY"))
                {
                    var timestamp = Convert.ToDateTime(jobj["Items"][i]["Value"]["Timestamp"].ToString()).ToLocalTime();
                    lvItem = new DataItemListViewItem(timestamp.ToString(),
                                                      jobj["Items"][i]["Value"]["Value"].ToString(),
                                                      jobj["Items"][i]["Value"]["UnitsAbbreviation"].ToString());
                }
                else
                {
                    var timestamp = Convert.ToDateTime(jobj["Items"][i]["Timestamp"].ToString()).ToLocalTime();
                    lvItem = new DataItemListViewItem(timestamp.ToString(),
                                                      jobj["Items"][i]["Value"].ToString(),
                                                      jobj["Items"][i]["UnitsAbbreviation"].ToString());
                }

                lvData.Items.Add(lvItem);
            }

            lvData.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
            lvData.EndUpdate();
        }
Beispiel #2
0
        /* In production code I wouldn't put this function in a WinForm, but as I couldn't figure out in time how to
         * pass the websocket message out of the function as a Task Result without ending the task, I decided to just
         * drop it here for simplicity. Most code examples I could find usually just wrote the message out to the Console
         * within the function.
         * This piece of code is largely based on the example code from the PI Web API programmer documentation under the
         * Channels (Core Services) entry. I have made some moifications to suit my project such as setting the RequestHeader
         * and the client credentials, as well as handling the websocket message to parse the JSON and drop the data into
         * a ListView control. */

        private async Task GetAsync(string webId, CancellationToken cancellationToken)
        {
            string baseUri = baseUrl.Replace("https", "wss");
            Uri    uri     = new Uri(string.Format("{0}/streams/{1}/channel?includeInitialValues=true", baseUri, webId));

            WebSocketReceiveResult receiveResult;

            byte[] receiveBuffer = new byte[65536];
            ArraySegment <byte> receiveSegment = new ArraySegment <byte>(receiveBuffer);

            using (ClientWebSocket webSocket = new ClientWebSocket())
            {
                try
                {
                    webSocket.Options.SetRequestHeader("Authorization", "Basic");
                    webSocket.Options.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["userid"], ConfigurationManager.AppSettings["password"]);

                    await webSocket.ConnectAsync(uri, CancellationToken.None);
                }
                catch (WebSocketException)
                {
                    MessageBox.Show("Could not connect to server.");
                    return;
                }

                while (true)
                {
                    try
                    {
                        receiveResult = await webSocket.ReceiveAsync(receiveSegment, cancellationToken);
                    }
                    catch (OperationCanceledException)
                    {
                        break;
                    }

                    if (receiveResult.MessageType != WebSocketMessageType.Text)
                    {
                        await webSocket.CloseAsync(
                            WebSocketCloseStatus.InvalidMessageType,
                            "Message type is not text.",
                            CancellationToken.None);

                        return;
                    }
                    else if (receiveResult.Count > receiveBuffer.Length)
                    {
                        await webSocket.CloseAsync(
                            WebSocketCloseStatus.InvalidPayloadData,
                            "Message is too long.",
                            CancellationToken.None);

                        return;
                    }

                    string  message = Encoding.UTF8.GetString(receiveBuffer, 0, receiveResult.Count);
                    JObject msg     = JObject.Parse(message);

                    try
                    {
                        var timestamp = Convert.ToDateTime(msg["Items"][0]["Items"][0]["Timestamp"].ToString()).ToLocalTime();
                        var lvItem    = new DataItemListViewItem(timestamp.ToString(),
                                                                 msg["Items"][0]["Items"][0]["Value"].ToString(),
                                                                 msg["Items"][0]["Items"][0]["UnitsAbbreviation"].ToString());

                        lvData.Items.Add(lvItem);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                    }
                }

                await webSocket.CloseAsync(
                    WebSocketCloseStatus.NormalClosure,
                    "Closing connection.",
                    CancellationToken.None);
            }
        }
Beispiel #3
0
        private async void btnBulkData_Click(object sender, EventArgs e)
        {
            lvData.Items.Clear();

            if (lvResults.SelectedItems == null)
            {
                MessageBox.Show("Must select at least one attribute for data retrieval!");
                return;
            }

            if (cboStreamSetType.SelectedItem == null)
            {
                MessageBox.Show("Must select a stream type for data retrieval!");
                return;
            }

            var attrWebIds = new List <string>();

            foreach (AFAttributeListViewItem item in lvResults.SelectedItems)
            {
                attrWebIds.Add(item.SubItems[2].Text);
            }

            var url = new StringBuilder();

            url.AppendFormat(@"{0}/streamsets/{1}?webid={2}", baseUrl, cboStreamSetType.SelectedItem.ToString(), attrWebIds[0]);

            for (int i = 1; i < attrWebIds.Count(); i++) // We start the iterator at 1 instead of 0, as we've already added the WebId of the first attribute to the url
            {
                url.AppendFormat(@"&webid={0}", attrWebIds[i]);
            }

            JObject jobj = await client.GetAsync(url.ToString());

            lvData.BeginUpdate();
            if (cboStreamSetType.SelectedItem.ToString().ToUpper().Equals("VALUE"))
            {
                for (int i = 0; i < jobj["Items"].Count(); i++)
                {
                    DataItemListViewItem lvItem;
                    var timestamp = Convert.ToDateTime(jobj["Items"][i]["Value"]["Timestamp"].ToString()).ToLocalTime();
                    lvItem = new DataItemListViewItem(timestamp.ToString(),
                                                      jobj["Items"][i]["Value"]["Value"].ToString(),
                                                      jobj["Items"][i]["Value"]["UnitsAbbreviation"].ToString());

                    lvData.Items.Add(lvItem);
                }
            }
            else
            {
                for (int i = 0; i < jobj["Items"].Count(); i++)
                {
                    for (int j = 0; j < jobj["Items"][i]["Items"].Count(); j++)
                    {
                        DataItemListViewItem lvItem;
                        var timestamp = Convert.ToDateTime(jobj["Items"][i]["Items"][j]["Timestamp"].ToString()).ToLocalTime();
                        lvItem = new DataItemListViewItem(timestamp.ToString(),
                                                          jobj["Items"][i]["Items"][j]["Value"].ToString(),
                                                          jobj["Items"][i]["Items"][j]["UnitsAbbreviation"].ToString());
                        lvData.Items.Add(lvItem);
                    }
                }
            }

            lvData.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
            lvData.EndUpdate();
        }