private void AddHubButton_Click(object sender, EventArgs e)
 {
     using (var f = new AddHubForm {
         StartPosition = FormStartPosition.CenterParent
     })
     {
         var result = f.ShowDialog();
         if (result == DialogResult.OK)
         {
             var ipPort = f.ipAddress.Text + ":" + f.portNumber.Text;
             try
             {
                 var urlString                   = "http://" + ipPort;
                 var hubResponse                 = new RestClient(urlString).Execute(new RestRequest("node_id/", Method.GET)).Content;
                 var nodeIdAndHostName           = hubResponse.Split(new char[] { ' ' }, 2);
                 AddressHostNameAccessLevel body = new AddressHostNameAccessLevel
                 {
                     Address     = ipPort,
                     HostName    = nodeIdAndHostName[1],
                     AccessLevel = 1
                 };
                 var enabledRes = restClient.Execute(new RestRequest("nodes/" + nodeIdAndHostName[0], Method.PUT, DataFormat.Json)
                                                     .AddParameter("application/json", JsonConvert.SerializeObject(body), ParameterType.RequestBody));
                 if (enabledRes.StatusCode != System.Net.HttpStatusCode.OK)
                 {
                     MessageBox.Show("Cannot change node permission. node_id=" + nodeIdAndHostName[0]);
                     return;
                 }
                 var connectedRes = restClient.Execute(new RestRequest("connections/connect?save=1", Method.POST)
                                                       .AddHeader("Content-type", "application/json").AddJsonBody(new string[] { body.Address }));
                 if (connectedRes.StatusCode != System.Net.HttpStatusCode.OK)
                 {
                     MessageBox.Show("Cannot connect to " + body.Address);
                     return;
                 }
                 ReloadHubList();
             }
             catch (Exception err)
             {
                 MessageBox.Show("Cannot add " + ipPort + ". Please check IP address and port number. Error: " + err.Message);
             }
         }
     }
 }
 private void NodeList_CellContentClick(object sender, DataGridViewCellEventArgs e)
 {
     if (e.RowIndex < 0)
     {
         return;
     }
     if (e.ColumnIndex == 1)
     {
         var   cell     = (DataGridViewComboBoxCell)nodeList.Rows[e.RowIndex].Cells[1];
         Int32 selected = 0;
         for (int i = 0; i < cell.Items.Count; ++i)
         {
             if (cell.Items[i].Equals(cell.Value))
             {
                 selected = i;
             }
         }
         string nodeId = (string)nodeList.Rows[e.RowIndex].Cells[4].Value;
         AddressHostNameAccessLevel body = new AddressHostNameAccessLevel
         {
             Address     = (string)nodeList.Rows[e.RowIndex].Cells[3].Value,
             HostName    = (string)nodeList.Rows[e.RowIndex].Cells[0].Value,
             AccessLevel = selected
         };
         var enabledRes = restClient.Execute(new RestRequest("nodes/" + nodeId, selected > 0 ? Method.PUT : Method.DELETE, DataFormat.Json)
                                             .AddParameter("application/json", JsonConvert.SerializeObject(body), ParameterType.RequestBody));
         if (enabledRes.StatusCode != System.Net.HttpStatusCode.OK)
         {
             MessageBox.Show("Cannot change node permission. node_id=" + nodeId);
             return;
         }
         var connectedRes = restClient.Execute(new RestRequest("connections/" + (selected > 0 ? "connect" : "disconnect") + "?save=1", Method.POST)
                                               .AddHeader("Content-type", "application/json").AddJsonBody(new string[] { body.Address }));
         if (connectedRes.StatusCode != System.Net.HttpStatusCode.OK)
         {
             MessageBox.Show("Cannot connect to " + body.Address);
             return;
         }
         this.nodeList.Invalidate();
     }
 }