Exemple #1
0
 public void Disconnect()
 {
     if (!Mode)
     {
         if (ClientsPool.ContainsKey(EnemyPoint.ToString()))
         {
             SendMessage(ClientsPool[EnemyPoint.ToString()].GetStream(), MessageCode.Fin);
             ClientsPool[EnemyPoint.ToString()].Close();
         }
     }
 }
Exemple #2
0
 //by invoking this method server sends Playaccept message, to confirm players choose
 public void SelectPlayer(IPEndPoint player)
 {
     if (ClientsPool.ContainsKey(player.ToString()))
     {
         EnemyPoint = player;
         SendMessage(ClientsPool[EnemyPoint.ToString()].GetStream(), MessageCode.PlayAccept);
     }
     else
     {
         throw new FailedToConnectException("Хост с таким адресом недоступен, похоже он отключился");
     }
 }
Exemple #3
0
 private void ClearWatingList()
 {
     //clears all waiting users except the choosen one
     Dictionary <string, TcpClient> .KeyCollection Keys = ClientsPool.Keys;
     foreach (string key in Keys)
     {
         if (key != EnemyPoint.ToString())
         {
             ClientsPool.Remove(key);
         }
     }
 }
Exemple #4
0
 private void ClientOnTryConnect(IAsyncResult res)
 {
     try
     {
         TcpListener Server  = res.AsyncState as TcpListener;
         TcpClient   NewHost = Server.EndAcceptTcpClient(res);
         string      key     = ((IPEndPoint)NewHost.Client.RemoteEndPoint).ToString();
         if (!ClientsPool.ContainsKey(key))
         {
             Thread Handler = new Thread(new ParameterizedThreadStart(MaintainConnection));
             ClientsPool.Add(key, NewHost);
             Handler.Start(NewHost);
         }
         Server.BeginAcceptTcpClient(new AsyncCallback(ClientOnTryConnect), Server);
     }
     catch (ObjectDisposedException)
     {
         return;
     }
 }
Exemple #5
0
        public void Connect(IPEndPoint Opponent)
        {
            //will be called when player 2 wants to connect to the host
            //method will add player to pool, and elicit select player
            TcpClient NewPlayer = new TcpClient(LocalPoint);

            try
            {
                NewPlayer.Connect(Opponent);
                Mode = false;
                ClientsPool.Add(Opponent.ToString(), NewPlayer);
                EnemyPoint = Opponent;
                Thread Handler = new Thread(new ParameterizedThreadStart(MaintainConnection));
                Handler.Start(NewPlayer);
                SendMessage(NewPlayer.GetStream(), MessageCode.PlayRequest);
            }
            catch (SocketException err)
            {
                throw new FailedToConnectException("Невозможно подключиться к серверу");
            }
        }