public MainPage(int observerServerPort, Client myClient)
        {
            this.myClient = myClient;
            InitializeComponent();
            this.observerServerPort = observerServerPort;
            Task.Run(() => checkForUpdate());


            TTransport transport = new TSocket("localhost", 9091);
            TProtocol  protocol  = new TBinaryProtocol(transport);

            transport.Open();

            TransformerService.Client client = new TransformerService.Client(protocol);
            List <MeciDTO>            dtos   = client.findAllMeci();

            meciuriData = retreive(dtos);
            transport.Close();

            MessageServer messageServer = new MessageServer(observerServerPort); // start mini-server as observer on the client

            PopulateMeciTable();
            this.locuriCBox.Text            = "0";
            this.listaMeciuri.FullRowSelect = true;
        }
        private void checkForUpdatesImpl(bool isUpdate)
        {
            if (isUpdate)
            {
                PopulateMeciTable();
            }
            else
            {
                TTransport transport = new TSocket("localhost", 9091);
                TProtocol  protocol  = new TBinaryProtocol(transport);
                transport.Open();

                TransformerService.Client client = new TransformerService.Client(protocol);
                var dtos = client.findAllMeci();
                transport.Close();
                meciuriData = retreive(dtos);

                PopulateMeciTable();
            }
        }
        private void FilterNotSoldOut()
        {
            listaMeciuri.Items.Clear();
            TTransport transport = new TSocket("localhost", 9091);
            TProtocol  protocol  = new TBinaryProtocol(transport);

            transport.Open();

            TransformerService.Client client = new TransformerService.Client(protocol);
            var dtos = client.findAllMeciWithTickets().OrderBy(x => x.NumarBileteDisponibile).Reverse().ToList();

            transport.Close();

            var all = retreive(dtos);

            foreach (Meci s in all)
            {
                var row = new string[] { s.id, s.home, s.away, s.date.ToShortDateString(), s.numarBileteDisponibile.ToString() };
                var lvi = new ListViewItem(row);
                listaMeciuri.Items.Add(lvi);
                lvi.Tag = s;
            }
        }
        private void PopulateMeciTable()
        {
            listaMeciuri.Items.Clear();



            TTransport transport = new TSocket("localhost", 9091);
            TProtocol  protocol  = new TBinaryProtocol(transport);

            transport.Open();

            TransformerService.Client client = new TransformerService.Client(protocol);
            var dtos = client.findAllMeci();

            transport.Close();

            var all = retreive(dtos);

            foreach (Meci s in all)
            {
                if (s.numarBileteDisponibile > 0)
                {
                    var row = new string[] { s.id, s.home, s.away, s.date.ToShortDateString(), s.numarBileteDisponibile.ToString() };
                    var lvi = new ListViewItem(row);
                    listaMeciuri.Items.Add(lvi);
                    lvi.Tag = s;
                }
                else
                {
                    var          row = new string[] { s.id, s.home, s.away, s.date.ToShortDateString(), "SOLD OUT" };
                    ListViewItem lvi = new ListViewItem(row);
                    lvi.ForeColor = Color.Red;
                    listaMeciuri.Items.Add(lvi);
                    lvi.Tag = s;
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string username = usernameBox.Text;
            string password = passwordBox.Text;

            if (username != null && password != null)
            {
                TTransport transport = new TSocket("localhost", 9091);
                TProtocol  protocol  = new TBinaryProtocol(transport);
                transport.Open();

                TransformerService.Client client = new TransformerService.Client(protocol);
                observerServerPort = getAvailablePort(9092);
                Debug.WriteLine("port for client's server: " + observerServerPort);
                String response = client.login(username, password, "localhost", observerServerPort);
                Console.WriteLine("CSharp client received: {0}", response);
                transport.Close();

                string id = "null";
                if (response.Equals("error"))
                {
                    throw new Exception("authentification failed");
                }
                else
                {
                    id = response;
                }
                Random   random    = new Random();
                string   sessionId = random.NextDouble().ToString();
                Client   myClient  = new Client(id, sessionId, username, password, "localhost", observerServerPort);
                MainPage form2     = new MainPage(observerServerPort, myClient);
                form2.Text = "Form for " + username;
                form2.Show();
                this.Hide();
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            String nume   = this.numeCBox.Text;
            String bilete = this.locuriCBox.Text;
            int    locuri = -1;

            int.TryParse(bilete, out locuri);

            if (nume.Length > 0 && bilete.Length > 0 && locuri != -1)
            {
                if (this.listaMeciuri.SelectedItems.Count > 0)
                {
                    ListViewItem item = this.listaMeciuri.SelectedItems[0];

                    Meci selectedMatch = (Meci)item.Tag;

                    if (selectedMatch.numarBileteDisponibile < locuri)
                    {
                        MessageBox.Show("Nu sunt destule bilete disponibile!");
                    }
                    else
                    {
                        selectedMatch.numarBileteDisponibile = selectedMatch.numarBileteDisponibile - locuri;

                        TTransport transport = new TSocket("localhost", 9091);
                        TProtocol  protocol  = new TBinaryProtocol(transport);
                        transport.Open();

                        TransformerService.Client client = new TransformerService.Client(protocol);
                        TipMeciDTO tipdto = (TipMeciDTO)Enum.ToObject(typeof(TipMeciDTO), selectedMatch.tip);
                        MeciDTO    mdto   = new MeciDTO
                        {
                            Id   = selectedMatch.id,
                            Home = selectedMatch.home,
                            Away = selectedMatch.away,
                            Date = selectedMatch.date.Ticks,
                            Tip  = tipdto,
                            NumarBileteDisponibile = selectedMatch.numarBileteDisponibile
                        };
                        ClientDTO cdto = new ClientDTO
                        {
                            Id       = myClient.id,
                            Nume     = nume,
                            Password = myClient.password,
                            Ip       = myClient.host,
                            Port     = myClient.port
                        };
                        client.ticketsSold(mdto, cdto);
                        transport.Close();

                        checkForUpdates(true);
                        PopulateMeciTable();

                        MessageBox.Show("Ati cumparat biletele!");
                    }
                }
                else
                {
                    MessageBox.Show("Nu ati selectat un meci din lista!");
                }
            }
            else
            {
                MessageBox.Show("Nu ati introdus bine datele!");
            }
        }