示例#1
0
        private void Workbook_SheetActivate(object sh)
        {
            if (!IsLndWorkbook())
            {
                return;
            }
            var ws = (Worksheet)sh;

            LApp?.Refresh(ws.Name);
        }
        private void WsOnChange(Range target)
        {
            if (target.Row < OpenChannelsTable.StartRow || target.Row > OpenChannelsTable.EndRow ||
                (target.Value2?.ToString() != "" && target.Value2 != null))
            {
                return;
            }
            OpenChannelForm.ClearErrorData();
            var channel = OpenChannelsTable.DataList[target.Row - OpenChannelsTable.DataStartRow];

            try
            {
                LApp.LndClient.CloseChannel(channel.ChannelPoint, false);
                OpenChannelsTable.RemoveRow(target.Row);
                LApp.Refresh(SheetNames.Channels);
            }
            catch (RpcException e)
            {
                if (e.Status.Detail.Contains("peer is offline"))
                {
                    try
                    {
                        LApp.LndClient.CloseChannel(channel.ChannelPoint, true);
                        OpenChannelsTable.RemoveRow(target.Row);
                        LApp.Refresh(SheetNames.Channels);
                    }
                    catch (RpcException e2)
                    {
                        OpenChannelForm.DisplayError(e2);
                    }
                }
                else
                {
                    OpenChannelForm.DisplayError(e);
                }
            }
        }
示例#3
0
 private void WsOnChange(Range target)
 {
     if (target.Row < PeersTable.StartRow || target.Row > PeersTable.EndRow ||
         (target.Value2?.ToString() != "" && target.Value2 != null))
     {
         return;
     }
     PeersForm.ClearErrorData();
     try
     {
         var peer = PeersTable.DataList[target.Row - PeersTable.DataStartRow];
         LApp.LndClient.DisconnectPeer(peer.PubKey);
         PeersTable.RemoveRow(target.Row);
         LApp.Refresh(SheetNames.Peers);
     }
     catch (RpcException e)
     {
         PeersForm.DisplayError(e);
     }
 }
        private void SubmitButtonOnClick(object sender, EventArgs e)
        {
            ClearErrorData();
            if (typeof(TRequestMessage) == typeof(ConnectPeerRequest))
            {
                var fullAddress = (string)Ws.Cells[_fieldToRow["addr"], EndColumn].Value2;
                if (fullAddress == null)
                {
                    return;
                }
                var addressParts = fullAddress.Split('@');

                string pubkey;
                string host;
                switch (addressParts.Length)
                {
                case 0:
                    return;

                case 2:
                    pubkey = addressParts[0];
                    host   = addressParts[1];
                    break;

                default:
                    Utilities.DisplayError(ErrorData, "Error", "Invalid address, must be pubkey@ip:host");
                    return;
                }

                var  permanent = Ws.Cells[_fieldToRow["perm"], EndColumn].Value2;
                bool perm      = permanent == null || (bool)permanent;

                var address = new LightningAddress {
                    Host = host, Pubkey = pubkey
                };
                var request = new ConnectPeerRequest {
                    Addr = address, Perm = perm
                };
                try
                {
                    _lApp.LndClient.ConnectPeer(request);
                    _lApp.Refresh(SheetNames.Peers);
                    ClearForm();
                }
                catch (RpcException rpcException)
                {
                    DisplayError(rpcException);
                }
            }
            else if (typeof(TRequestMessage) == typeof(SendCoinsRequest))
            {
                var request = new SendCoinsRequest
                {
                    Addr   = Ws.Cells[_fieldToRow["addr"], EndColumn].Value2,
                    Amount = (long)Ws.Cells[_fieldToRow["amount"], EndColumn].Value2
                };
                var satPerByte = Ws.Cells[_fieldToRow["sat_per_byte"], EndColumn].Value2;
                if (satPerByte == null)
                {
                    satPerByte = 0;
                }
                if (satPerByte > 0)
                {
                    request.SatPerByte = satPerByte;
                }

                var targetConf = Ws.Cells[_fieldToRow["target_conf"], EndColumn].Value2;
                if (targetConf == null)
                {
                    targetConf = 0;
                }
                if (targetConf > 0)
                {
                    request.TargetConf = targetConf;
                }

                try
                {
                    _lApp.LndClient.SendCoins(request);
                    _lApp.Refresh(SheetNames.Transactions);
                    ClearForm();
                }
                catch (RpcException rpcException)
                {
                    DisplayError(rpcException);
                }
            }
            else if (typeof(TRequestMessage) == typeof(OpenChannelRequest))
            {
                var localFundingAmount = long.Parse(GetValue("local_funding_amount"));
                var minConfs           = int.Parse(GetValue("min_confs"));
                var minHtlcMsat        = long.Parse(GetValue("min_htlc_msat"));
                var nodePubKeyString   = GetValue("node_pubkey");
                var isPrivate          = true;
                if (bool.TryParse(GetValue("private"), out var result))
                {
                    isPrivate = result;
                }
                var pushSat        = long.Parse(GetValue("push_sat"));
                var remoteCsvDelay = uint.Parse(GetValue("remote_csv_delay"));
                var satPerByte     = long.Parse(GetValue("sat_per_byte"));
                var targetConf     = int.Parse(GetValue("target_conf"));
                var request        = new OpenChannelRequest
                {
                    LocalFundingAmount = localFundingAmount,
                    MinConfs           = minConfs,
                    MinHtlcMsat        = minHtlcMsat,
                    NodePubkeyString   = nodePubKeyString,
                    Private            = isPrivate,
                    PushSat            = pushSat
                };
                if (remoteCsvDelay > 0)
                {
                    request.RemoteCsvDelay = remoteCsvDelay;
                }
                if (satPerByte > 0)
                {
                    request.SatPerByte = satPerByte;
                }
                if (targetConf > 0)
                {
                    request.TargetConf = targetConf;
                }

                try
                {
                    _lApp.LndClient.OpenChannel(request);
                    _lApp.Refresh(SheetNames.Channels);
                    ClearForm();
                }
                catch (RpcException rpcException)
                {
                    DisplayError(rpcException);
                }
            }
            else
            {
                var request   = new TRequestMessage();
                var rowNumber = _dataStartRow;
                foreach (var field in Fields)
                {
                    Range dataCell = Ws.Cells[rowNumber, EndColumn];
                    var   value    = dataCell.Value2;
                    if (!string.IsNullOrWhiteSpace(value?.ToString()))
                    {
                        field.Accessor.SetValue(request, dataCell.Value2);
                    }
                }

                _query(request);
            }
        }