/// <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); }
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ů"); } }
//Žá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!"); } }
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; }
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); }