예제 #1
0
        public async Task ClientConnectSample(
            IPAddress serverIpAddress,
            Guid serverId,
            X509Certificate serverCertificate)
        {
            var client = new TcpClient(AddressFamily.InterNetwork);
            await client.ConnectAsync(serverIpAddress, 1234);

            var result = await Lapi.ConnectToServer(
                client.GetStream(),
                applicationSpecificPresharedKey,
                clientId,
                serverId,
                clientCertificate,
                serverCertificate);

            if (result.Successful)
            {
                var stream = result.Result;
                await stream.WriteSafelyAsync(CancellationToken.None, "Hi there, server!");

                var response = await stream.ReceiveStringSafelyAsync(CancellationToken.None);

                if (response.Successful)
                {
                    Console.WriteLine($"Server responded with: '{response.Result}'");
                }
            }
        }
예제 #2
0
        private ITemplate BuildTemplate()
        {
            ITemplate tpl  = new ITemplate();
            EItemType type = (EItemType)cmbType.SelectedIndex;

            tpl.txtName = txtName.Text;
            if (type == EItemType.Lapis)                // Lapis name
            {
                Lapi l = (cmbLapi.SelectedItem as ImageComboItem).Tag as Lapi;
                tpl.txtName    = l.Name;
                tpl.LapisType  = l.Type;
                tpl.LapisLevel = l.Level;
            }
            else if (type == EItemType.Lapisa)                // Lapisa name
            {
                tpl.txtName = ((ELapisa)cmbLapisa.SelectedIndex).ToString();
            }

            tpl.cmbType     = cmbType.SelectedIndex;
            tpl.cmbItemIcon = cmbItemIcon.SelectedIndex;
            tpl.cmbQuality  = cmbQuality.SelectedIndex;
            tpl.cmbASPD     = cmbASPD.SelectedIndex;
            tpl.numEnchant  = numEnchant.Value;
            tpl.cmbLapisa   = cmbLapisa.SelectedIndex;

            tpl.cmbSockel1 = cmbSockel1.SelectedIndex;
            tpl.cmbSockel2 = cmbSockel2.SelectedIndex;
            tpl.cmbSockel3 = cmbSockel3.SelectedIndex;
            tpl.cmbSockel4 = cmbSockel4.SelectedIndex;
            tpl.cmbSockel5 = cmbSockel5.SelectedIndex;
            tpl.cmbSockel6 = cmbSockel6.SelectedIndex;

            tpl.txtGold = txtGold.GoldAmount;

            tpl.txtANG1        = txtANG1.Text;
            tpl.txtANG2        = txtANG2.Text;
            tpl.txtHaltbarkeit = txtHaltbarkeit.Text;
            tpl.txtLP          = txtLP.Text;
            tpl.txtMP          = txtMP.Text;
            tpl.txtAP          = txtAP.Text;
            tpl.txtGES         = txtGES.Text;
            tpl.txtGLÜ         = txtGLÜ.Text;
            tpl.txtSTR         = txtSTR.Text;
            tpl.txtWEI         = txtWEI.Text;
            tpl.txtINT         = txtINT.Text;
            tpl.txtABW         = txtABW.Text;
            tpl.txtLPEP4       = txtLPEP4.Text;
            tpl.txtMPEP4       = txtMPEP4.Text;
            tpl.txtAPEP4       = txtAPEP4.Text;
            tpl.txtGESEP4      = txtGESEP4.Text;
            tpl.txtGLÜEP4      = txtGLÜEP4.Text;
            tpl.txtSTREP4      = txtSTREP4.Text;
            tpl.txtWEIEP4      = txtWEIEP4.Text;
            tpl.txtINTEP4      = txtINTEP4.Text;
            tpl.txtABWEP4      = txtABWEP4.Text;
            tpl.txtResistenz   = txtResistenz.Text;
            tpl.txtSeller      = txtSeller.Text;

            return(tpl);
        }
예제 #3
0
        private string CompileStats()
        {
            string chunk = "";

            if (cmbType.SelectedIndex > 4)              // kein Equip/Lapi/Lapisa/AP
            {
                return(chunk = (int)EStatusType.ItemIcon + ":" + (cmbItemIcon.Items[cmbItemIcon.SelectedIndex] as ImageComboItem).Text.Replace(".png", "") + ";");
            }

            if (cmbType.SelectedIndex == 2)                // Lapi
            {
                Lapi l = (cmbLapi.SelectedItem as ImageComboItem).Tag as Lapi;
                chunk = (int)l.ToImageIndex() + ":" + l.Level;
                return(chunk);
            }
            if (cmbType.SelectedIndex == 3)                // Lapisa
            {
                chunk = cmbLapisa.SelectedIndex.ToString();
                return(chunk);
            }
            if (cmbType.SelectedIndex == 4)                // APItem
            {
                chunk = (int)EStatusType.ItemIcon + ":" + (cmbItemIcon.Items[cmbItemIcon.SelectedIndex] as ImageComboItem).Text.Replace(".png", "") + ";";
                return(chunk);
            }

            chunk  = (int)EStatusType.Quality + ":" + cmbQuality.SelectedIndex + ";";
            chunk += (int)EStatusType.MinAngOrDef + ":" + txtANG1.Text + ";";
            if (cmbType.SelectedIndex == 0)                // Waffe
            {
                chunk += (int)EStatusType.MaxAng + ":" + txtANG2.Text + ";";
                chunk += (int)EStatusType.AspdOrResist + ":" + cmbASPD.SelectedIndex + ";";
            }
            else               // Rüstung
            {
                chunk += (int)EStatusType.AspdOrResist + ":" + txtResistenz.Text + ";";
            }
            chunk += (int)EStatusType.Haltbar + ":" + txtHaltbarkeit.Text + ";";
            chunk += (int)EStatusType.MaxLP + ":" + txtLP.Text + ";";
            chunk += (int)EStatusType.MaxMP + ":" + txtMP.Text + ";";
            chunk += (int)EStatusType.MaxAP + ":" + txtAP.Text + ";";
            chunk += (int)EStatusType.STR + ":" + txtSTR.Text + ";";
            chunk += (int)EStatusType.ABW + ":" + txtABW.Text + ";";
            chunk += (int)EStatusType.WEI + ":" + txtWEI.Text + ";";
            chunk += (int)EStatusType.INT + ":" + txtINT.Text + ";";
            chunk += (int)EStatusType.GES + ":" + txtGES.Text + ";";
            chunk += (int)EStatusType.GLÜ + ":" + txtGLÜ.Text + ";";
            chunk += (int)EStatusType.ItemIcon + ":" + (cmbItemIcon.Items[cmbItemIcon.SelectedIndex] as ImageComboItem).Text.Replace(".png", "") + ";";
            chunk += (int)EStatusType.MaxLPEP4 + ":" + txtLPEP4.Text + ";";
            chunk += (int)EStatusType.MaxMPEP4 + ":" + txtMPEP4.Text + ";";
            chunk += (int)EStatusType.MaxAPEP4 + ":" + txtAPEP4.Text + ";";
            chunk += (int)EStatusType.STREP4 + ":" + txtSTREP4.Text + ";";
            chunk += (int)EStatusType.ABWEP4 + ":" + txtABWEP4.Text + ";";
            chunk += (int)EStatusType.WEIEP4 + ":" + txtWEIEP4.Text + ";";
            chunk += (int)EStatusType.INTEP4 + ":" + txtINTEP4.Text + ";";
            chunk += (int)EStatusType.GESEP4 + ":" + txtGESEP4.Text + ";";
            chunk += (int)EStatusType.GLÜEP4 + ":" + txtGLÜEP4.Text + ";";

            return(chunk);
        }
예제 #4
0
        private string CompileLapis()
        {
            string chunk = "";

            for (int i = 1; i < cmbQuality.Items.Count; i++)
            {
                LapiImageComboBox cmb  = Controls["cmbSockel" + i] as LapiImageComboBox;
                ImageComboItem    item = (cmb.Items[cmb.SelectedIndex] as ImageComboItem);
                if (item == null)
                {
                    chunk += "-1:-1;";
                    continue;
                }

                Lapi lapi = item.Tag as Lapi;
                if (lapi != null)
                {
                    chunk += lapi.ToImageIndex() + ":" + lapi.Level + ";";
                }
                else                 // empty slot = type -1
                {
                    chunk += "-1:0;";
                }
            }

            return(chunk);
        }
예제 #5
0
        public async Task RunServerExample()
        {
            var server        = new TcpServer(IPAddress.Loopback, 1234);
            var serverControl = Lapi.RunServer(
                server,
                applicationSpecificPresharedKey,
                serverId,
                serverCertificate,
                () => CurrentOtp,
                OnClientConnected,
                null,
                clientId => null);
            await Task.Delay(TimeSpan.FromMinutes(5));

            serverControl.StopServer();
        }
예제 #6
0
        private ToolStripMenuItem TemplateItem_OnAdd(ITemplate Template, ToolStripMenuItem Item)
        {
            EItemType type = (EItemType)Template.cmbType;

            if (type != EItemType.Lapis && type != EItemType.Lapisa)
            {
                Item.Image = GetTemplateItemImage(type, Template.cmbItemIcon);
            }
            else if (type == EItemType.Lapis)
            {
                Lapi l = new Lapi(Template.LapisType, Template.LapisLevel);
                Item.Image = GetTemplateItemImage(type, l.ToImageIndex() + 1);                   // 0 = free slot
            }
            else if (type == EItemType.Lapisa)
            {
                Item.Image = GetTemplateItemImage(type, Template.cmbLapisa);
            }
            return(Item);
        }
예제 #7
0
파일: Program.cs 프로젝트: JMarianczuk/LAPI
        private static async Task FirstTest()
        {
            var server       = new TcpServer(IPAddress.Loopback, Port);
            var presharedKey = Enumerable.Range(1, 20).Select(x => (byte)x).ToArray();
            var serverCert   = X509CertificateService.GetOwnCertificate(TestGuid, Password);
            var clientCert   = X509CertificateService.GetOwnCertificate(OtherTestGuid, Password);
            var otpBuffer    = Enumerable.Range(1, 32).Select(x => (byte)x).ToArray();
            var otp          = new AesCryptographicService(SymmetricKey.FromBuffer(otpBuffer));

            var reducedServerCert = new X509Certificate2(serverCert.Export(X509ContentType.Cert));
            var reducedClientCert = new X509Certificate2(clientCert.Export(X509ContentType.Cert));

            var serverControl = Lapi.RunServer(
                server,
                presharedKey,
                TestGuid,
                serverCert,
                () => otp,
                ClientConnected,
                (_, __) => { },
                x =>
            {
                if (x.Equals(OtherTestGuid))
                {
                    return(clientCert);
                }

                return(null);
            });

            serverControl.OnError += error => Console.WriteLine($"{error.ErrorType}: {error.Message}");

            var client = new TcpClient();
            await client.ConnectAsync(IPAddress.Loopback, Port);

            var stream = await Lapi.ConnectToServer(
                client.GetStream(),
                presharedKey,
                OtherTestGuid,
                TestGuid,
                clientCert,
                serverCert);

            Console.WriteLine($"Successful connected: {stream.Successful}");
            //Console.WriteLine("Attempting to read from server");

            //byte[] buf = new byte[4];
            //stream.Result.ReadAsync(buf, 0, 4).Wait();
            //Console.WriteLine($"Received: {string.Join(", ", buf)}");


            //var registerResult = await Lapi.RegisterWithServer(IPAddress.Loopback, presharedKey, OtherTestGuid, TestGuid, clientCert, serverCert, otp, Port);
            //Console.WriteLine("Registering was " + (registerResult.Successful ? "" : "not ") + "successful");
            //registerResult.Result.Close();

            //var guidsResult = await Lapi.DiscoverServersOnLocalNetwork(presharedKey);
            //Console.WriteLine($"Discovery was " + (guidsResult.Successful ? "" : "not ") + "successful");
            //if (guidsResult.Successful)
            //{
            //    Console.WriteLine($"Found servers on network: {string.Join(", ", guidsResult.Result)}");
            //}

            Console.ReadLine();
            serverControl.StopServer();
        }
예제 #8
0
        private void ApplyTemplate(ITemplate tpl)
        {
            EItemType type = (EItemType)tpl.cmbType;

            cmbType.SelectedIndex     = tpl.cmbType;
            cmbItemIcon.SelectedIndex = tpl.cmbItemIcon;
            cmbQuality.SelectedIndex  = tpl.cmbQuality;
            cmbASPD.SelectedIndex     = tpl.cmbASPD;
            numEnchant.Value          = tpl.numEnchant;
            if (type == EItemType.Lapis)
            {
                Lapi tplLapi = new Lapi(tpl.LapisType, tpl.LapisLevel);
                int  i       = 0;
                foreach (Lapi l in LapiComboBox.Lapis)
                {
                    if (l.Name == tplLapi.Name)
                    {
                        cmbLapi.SelectedIndex = i;
                        break;
                    }
                    i++;
                }
            }

            cmbSockel1.SelectedIndex = tpl.cmbSockel1;
            cmbSockel2.SelectedIndex = tpl.cmbSockel2;
            cmbSockel3.SelectedIndex = tpl.cmbSockel3;
            cmbSockel4.SelectedIndex = tpl.cmbSockel4;
            cmbSockel5.SelectedIndex = tpl.cmbSockel5;
            cmbSockel6.SelectedIndex = tpl.cmbSockel6;

            txtGold.SetGold(tpl.txtGold);

            if (type != EItemType.Lapis && type != EItemType.Lapisa)
            {
                txtName.Text = tpl.txtName;
            }
            txtANG1.Text        = tpl.txtANG1;
            txtANG2.Text        = tpl.txtANG2;
            txtHaltbarkeit.Text = tpl.txtHaltbarkeit;
            txtLP.Text          = tpl.txtLP;
            txtMP.Text          = tpl.txtMP;
            txtAP.Text          = tpl.txtAP;
            txtGES.Text         = tpl.txtGES;
            txtGLÜ.Text         = tpl.txtGLÜ;
            txtSTR.Text         = tpl.txtSTR;
            txtWEI.Text         = tpl.txtWEI;
            txtINT.Text         = tpl.txtINT;
            txtABW.Text         = tpl.txtABW;
            txtLPEP4.Text       = tpl.txtLPEP4;
            txtMPEP4.Text       = tpl.txtMPEP4;
            txtAPEP4.Text       = tpl.txtAPEP4;
            txtGESEP4.Text      = tpl.txtGESEP4;
            txtGLÜEP4.Text      = tpl.txtGLÜEP4;
            txtSTREP4.Text      = tpl.txtSTREP4;
            txtWEIEP4.Text      = tpl.txtWEIEP4;
            txtINTEP4.Text      = tpl.txtINTEP4;
            txtABWEP4.Text      = tpl.txtABWEP4;
            txtResistenz.Text   = tpl.txtResistenz;
            txtSeller.Text      = tpl.txtSeller;
        }