コード例 #1
0
        /// <summary>
        /// Allows to register on an iChess server.
        /// </summary>
        /// <param name="ipAddress">The ip address of the server.</param>
        /// <param name="port">The port of the server.</param>
        /// <param name="username">The username of the client.</param>
        /// <param name="password">The password of the client.</param>
        /// <returns>-1 == unable to contact the server, 0 == the server has accepted the registration, 1 == the server refused the registration.</returns>
        public static int RegisterToServer(string ipAddress, int port, string username, string password)
        {
            // Initializing the return value
            int registrationAllowed = -1;

            try
            {
                // Format credentials
                ClientCredentials credentials = new ClientCredentials(username, password);

                // Send the registration request and wait 5000ms for a reply
                if (NetworkComms.SendReceiveObject <ClientCredentials, bool>(PACKET_TYPE_REGISTRATION_REQUEST, ipAddress, port, PACKET_TYPE_REGISTRATION_REPLY, DEFAULT_TIMEOUT, credentials))
                {
                    registrationAllowed = 0; // The server has accepted the registration
                }
                else
                {
                    registrationAllowed = 1; // The server has refused the registration
                }
            }
            catch (Exception)
            {
                registrationAllowed = -1; // An error occured
            }

            return(registrationAllowed);
        }
コード例 #2
0
        private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                //Odeslání žádosti o připojení a vyčkání 10 sekund na odpověď serveru
                var response = NetworkComms.SendReceiveObject <string, ConnectResponse>("ConnectUser", txtIp.Text, (int)numPort.Value, "ConnectInfo", 10000, txtName.Text);

                //Žádost přijata
                if (response.ResponseType == ResponseType.Accepted)
                {
                    //Skrytí Login formu
                    Hide();

                    //Otevření Lobby formu
                    Lobby = new LobbyForm(response)
                    {
                        ServerIp   = txtIp.Text,
                        ServerPort = (int)numPort.Value,
                        PlayerName = txtName.Text
                    };
                    Lobby.Show();
                }
                //Žádost zamítnuta
                else
                {
                    //Zobrazení důvodu zamítnutí
                    MessageBox.Show(string.Format($"Server {response.ServerName} odmítl spojení se zprávou: {response.Response}"));
                }
            }
            catch
            {
                //Připojení se nezdařilo
                MessageBox.Show("K severu není možné se připojit, zkontrolujte připojení a správnost zadaných údajů");
            }
        }
コード例 #3
0
        //Žádost o vyzvání hráče
        private static void ChallengeRequestDelgatePointer(PacketHeader packetheader, Connection connection, string name)
        {
            //Vyzvaný hráč - protivník
            Client enemy         = Clients.Find(x => x.Name == name);
            bool   isEnemyInGame = Games.Any(x => x.HasClient(enemy));

            IPEndPoint clientEndPoint = (IPEndPoint)connection.ConnectionInfo.RemoteEndPoint;

            //Pokud existuje a není ve hře
            if (enemy != null && !isEnemyInGame)
            {
                //Vyzyvatel
                Client player = Clients.Find(x => x.Ip == clientEndPoint.Address.ToString() && x.Port == clientEndPoint.Port);

                Console.WriteLine($"({player.Name}) vyzývá ke hře uživatele {enemy.Name}");

                try
                {
                    //Odeslání žádosti, čekání 20 sekund na odpověď
                    bool response = NetworkComms.SendReceiveObject <string, bool>("ChallengeAcceptRequest", enemy.Ip, enemy.Port, "ChallengeAcceptInfo", 20000, player.Name);

                    //Akceptováno
                    if (response)
                    {
                        Console.WriteLine($"({enemy.Name}) přijal výzvu od {player.Name}");
                        NetworkComms.SendObject("ChallengeAccepted", clientEndPoint.Address.ToString(), clientEndPoint.Port, enemy);
                        NetworkComms.SendObject("ChallengeAccepted", enemy.Ip, enemy.Port, player);
                    }
                    //Zamítnuto
                    else
                    {
                        Console.WriteLine($"({enemy.Name}) zamítl výzvu od {player.Name}");
                        NetworkComms.SendObject("ChallengeFailed", clientEndPoint.Address.ToString(), clientEndPoint.Port, $"Uživatele zamítl Vaši žádost ke hře!");
                    }
                }
                //Chyba, bez reakce
                catch
                {
                    Console.WriteLine($"({enemy.Name}) nereaguje na výzvu od {player.Name}");
                    NetworkComms.SendObject("ChallengeFailed", clientEndPoint.Address.ToString(), clientEndPoint.Port, $"Uživatele nestihl na Vaši žádost zareagovat včas!");
                }
            }

            //Hráč už je ve hře
            if (isEnemyInGame)
            {
                NetworkComms.SendObject("ChallengeFailed", clientEndPoint.Address.ToString(), clientEndPoint.Port, $"Uživatel {name} momentálně soupeří s někým jiným!");
            }

            //Hráč nenalezen
            if (enemy == null)
            {
                NetworkComms.SendObject("ChallengeFailed", clientEndPoint.Address.ToString(), clientEndPoint.Port, $"Uživatele se nepodařilo najít!");
            }
        }
コード例 #4
0
        private void replyButton_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            Stopwatch sw = new Stopwatch();

            sw.Start();

            string       receivedData = NetworkComms.SendReceiveObject <string, string>("Message", this.serverIp, this.serverPort, "ReturnMessage", 6000, this.countTextBox.Text);
            StringReader sr           = new StringReader(receivedData);
            DataSet      ds           = new DataSet();

            ds.ReadXml(sr);
            sw.Stop();
            this.timeLabel.Text = sw.ElapsedMilliseconds + " ms";

            this.replyDataDataGridView.DataSource = ds.Tables[0];
            this.Cursor = Cursors.Default;
        }
コード例 #5
0
ファイル: Nodes.cs プロジェクト: Nucs/nlib
        public DiscoveryResult <T> Discover(T node)
        {
            var dr = new DiscoveryResult <T>();

            try {
#if DEBUG
                var n = NetworkComms.SendReceiveObject <NodesList <T>, NodesList <T> >("Discover", node.IP, Ports.DiscoveryPort, "DiscoverReply", -1, KnownNodes);
#else
                var n = NetworkComms.SendReceiveObject <NodesList <T>, NodesList <T> >("Discover", node.IP, Ports.DiscoveryPort, "DiscoverReply", 10000, KnownNodes);
#endif
                dr.NodesList = n;
            } catch (Exception e) {
                dr.Exception  = e;
                dr.Successful = false;
            }
            if (dr.Successful)
            {
                KnownNodes.MergeInto(dr.NodesList);
            }
            return(dr);
        }