Untitled

 avatar
unknown
plain_text
a year ago
20 kB
1
Indexable
//Pogodi cifre
//Kreiranje brojeva na serverskoj strani-pogodi cifre, pise su inicijalizaciji sfe
tblBrojevi.getModel().addTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(TableModelEvent e) {
                if(Kontroler.getInstanca().getBrojevi().size()>=3)
                {
                    JOptionPane.showMessageDialog(null, "Uneli ste 3 broja");
                }
                else{
                    int red=e.getFirstRow();
                    int kolona=e.getColumn();

                    TableModel model=(TableModel) e.getSource();
                    if(model.getValueAt(red, kolona)!=null)
                    {
                        int vrednost=(int) model.getValueAt(red, kolona);
                        Broj broj=new Broj(kolona, red, vrednost);
                        
                        boolean postoji=Kontroler.getInstanca().postoji(broj);
                        if(postoji)
                        {
                            model.setValueAt(null, red, kolona);
                            JOptionPane.showMessageDialog(null, "Broj je vec unet");
                        }
                        else
                        {
                            Kontroler.getInstanca().dodajBroj(broj);
                            if(Kontroler.getInstanca().getBrojevi().size()==3)
                            {
                                btnPokreniServer.setEnabled(true);
                            }
                        }
                    }
                    
                }
               
            }
        });


//Biranje brojeva na klijentskoj strani na tbl mouseClicked
private int brojPokusaja=0;//Nalazi se iznad inicijalizacije
private int brojPogodjenih=0;//Da bi se znalo da li je pobedio

if(brojPokusaja<5)
        {
            JTable tabela=(JTable) evt.getSource();
            Point point=evt.getPoint();
            int red=tabela.rowAtPoint(point);
            int kolona=tabela.columnAtPoint(point);

            if(red!=-1 && kolona!=-1)
            {
                System.out.println("Koordinate "+red+" "+kolona);

                Broj broj=new Broj(kolona, red, -1);
                KlijentskiZahtev kz=new KlijentskiZahtev(Operacije.POGODI_BROJ, broj);
                Komunikacija.getInstanca().posaljiZahtev(kz);

                ServerskiOdgovor so=Komunikacija.getInstanca().primiOdgovor();
                Broj br1=(Broj) so.getOdgovor();

                //TableModel model=(TableModel) evt.getSource();
                if(br1==null)
                {
                    //model
                    tabela.setValueAt(-1, red, kolona);
                }
                else
                {
                    //model
                    tabela.setValueAt(br1.getVrednost(), br1.getRed(), br1.getKolona());
                    brojPogodjenih++;
                    if(brojPogodjenih==3)
                    {
                        JOptionPane.showMessageDialog(null, "Pobedili ste");
                        this.dispose();
                    }
                }

                brojPokusaja++;
            }
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Izgubili ste");
            this.dispose();
        }


//Kontroler
public void dodajBroj(Broj broj) {
        brojevi.add(broj);
        System.out.println(brojevi);
    }
    
    public boolean postoji(Broj broj) {
        for(Broj br: brojevi)
        {
            if(br.getVrednost()==broj.getVrednost())
            {
                return true;
            }
        }
        return false;
    }

//Bingo
private int rb;
    private String kombinacija;
    private int brojPogodjenihNaMestu;
    private int brojPogodjenihVanMesta;
//private int rezultat;

private int id;
    private Date datumVreme;
    private String dobitnaKombinacija;
    private int brojPokusaja;
    private String rezultat;//Pobedio, ili izgubio
    private List<Igra> igra;//Nema u bazi


public void sacuvajIgru(RezultatIgre rezultat) {
        int idRezultata=-1;
        try {
            String upit="INSERT INTO rezultat(datumVreme, dobitnaKombinacija, brojPokusaja, rezultat) VALUES(?, ?, ?, ?)";   
            PreparedStatement ps=Konekcija.getInstanca().getKonekcija().prepareStatement(upit, Statement.RETURN_GENERATED_KEYS);
            
            java.sql.Timestamp datumTS=new java.sql.Timestamp(rezultat.getDatumVreme().getTime());
            ps.setTimestamp(1, datumTS);
            ps.setString(2, rezultat.getDobitnaKombinacija());
            ps.setInt(3, rezultat.getBrojPokusaja());
            ps.setString(4, rezultat.getRezultat());
            
            ps.executeUpdate();
            ResultSet rs=ps.getGeneratedKeys();
            if(rs.next())
            {
                idRezultata=rs.getInt(1);
            }
            
            String upit1="INSERT INTO igra(datumVreme, dobitnaKombinacija, brojPokusaja, rezultat) VALUES(?, ?, ?, ?)";   
            PreparedStatement ps1=Konekcija.getInstanca().getKonekcija().prepareStatement(upit1);
            
            for (Igra igra: rezultat.getIgra()) {
                ps1.setString(1, igra.getKombinacija());
                ps1.setInt(2, igra.getBrojPogodjenihNaMestu());
                ps1.setInt(3, igra.getBrojPogodjenihVanMesta());
                ps1.setInt(4, idRezultata);
                
                ps1.addBatch();
            }
            
            ps1.executeBatch();
            
            Konekcija.getInstanca().getKonekcija().commit();
        } catch (SQLException ex) {
            Logger.getLogger(DBBroker.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

//ModelTabeleIgre
public List<Igra> getListaIgre() {
        return listaIgre;
    }

    void dodajIgri(Igra igra) {
        int rb=listaIgre.size()+1;
        igra.setRb(rb);
        listaIgre.add(igra);
        fireTableDataChanged();
    }
    
//Kontroler
private static Kontroler instanca;
    private DBBroker db;
    private ServerskaForma sf;
    private List<Igra> igre;
    private RezultatIgre rezultat;

    public Kontroler() {
        db=new DBBroker();
        
        igre=new ArrayList<>();
        rezultat=new RezultatIgre(-1, new Date(), null, -1, "izgubio", igre);
    }
    
    public static Kontroler getInstanca()
    {
        if(instanca==null)
        {
            instanca=new Kontroler();
        }
        return instanca;
    }
    
    public void sacuvajIgru() {
        rezultat.setDobitnaKombinacija(sf.vratiKombinaciju());
        rezultat.setBrojPokusaja(igre.size());
        db.sacuvajIgru(rezultat);
    }

    public Igra pogadjaj(Igra igra) {
        if(igre.size()>5)
        {
            return igra;
        }
        String kombinacijuNaServeru=sf.vratiKombinaciju();
        String kombinacijaNaKlijentu=igra.getKombinacija();
        
        int brojacNaMestu=0;
        int brojacVanMesta=0;
        
        String[] niz1=kombinacijuNaServeru.split("-");
        String[] niz2=kombinacijaNaKlijentu.split("-");
        
        if(niz1[0].equals(niz2[0]))
        {
            brojacNaMestu++;
        }
        else
        {
            if(kombinacijaNaKlijentu.contains(niz1[0]))
            {
                brojacVanMesta++;
            }
        }
        
        if(niz1[1].equals(niz2[1]))
        {
            brojacNaMestu++;
        }
        else
        {
            if(kombinacijaNaKlijentu.contains(niz1[1]))
            {
                brojacVanMesta++;
            }
        }
        
        if(niz1[2].equals(niz2[2]))
        {
            brojacNaMestu++;
        }
        else
        {
            if(kombinacijaNaKlijentu.contains(niz1[2]))
            {
                brojacVanMesta++;
            }
        }
        
        if(niz1[3].equals(niz2[3]))
        {
            brojacNaMestu++;
        }
        else
        {
            if(kombinacijaNaKlijentu.contains(niz1[3]))
            {
                brojacVanMesta++;
            }
        }
        
        igra.setBrojPogodjenihNaMestu(brojacNaMestu);
        igra.setBrojPogodjenihVanMesta(brojacVanMesta);
        
        igre.add(igra);
        if(brojacNaMestu==4)
        {
            rezultat.setRezultat("pobedio");
        }
        
        return igra;
    }
    
    public void setSf(ServerskaForma sf) {
        this.sf = sf;
    }

    public List<Igra> getIgre() {
        return igre;
    }

    public void setIgre(List<Igra> igre) {
        this.igre = igre;
    }

    public RezultatIgre getRezultat() {
        return rezultat;
    }

    public void setRezultat(RezultatIgre rezultat) {
        this.rezultat = rezultat;
    }

//Vesala btnPokreniIgru
List<ObradaKlijentskihZahteva> klijenti=Kontroler.getInstanca().getKlijenti();
        
        if(klijenti.size()==2)
        {
            odabranaRec=(String) cmbOdaberiRec.getSelectedItem();
            Kontroler.getInstanca().setOdabranaRec(odabranaRec);
            txtSlovo1.setText(odabranaRec.charAt(0)+"");
            txtSlovo2.setText(odabranaRec.charAt(1)+"");
            txtSlovo3.setText(odabranaRec.charAt(2)+"");
            txtSlovo4.setText(odabranaRec.charAt(3)+"");
            txtSlovo5.setText(odabranaRec.charAt(4)+"");
            
            //Server mora da obavesti klijente da je igra pocela
            for(ObradaKlijentskihZahteva k: klijenti)
            {
                k.obavestiKlijenta(Operacije.POCELA_IGRA, null);
            }
        }
        else
        {
            JOptionPane.showMessageDialog(null, "Cekaju se 2 klijenta");
        }

//Obrada klijentskih zahteva dodatka
public void obavestiKlijenta(int operacije, Object odgovor) {
        ServerskiOdgovor so=new ServerskiOdgovor();
        so.setOperacije(operacije);
        so.setOdgovor(odgovor);
        
        posaljiOdgovor(so);
    }

//Kontroler Server
private List<String> zadateReci = new ArrayList<>();
    private String odabranaRec;
    private int brojPogodaka=0;
    private static Kontroler instance;
    private List<ObradaKlijentskihZahteva> klijenti = new ArrayList<>();
    private ServerskaForma sf;
    private  Kontroler() {
        zadateReci.add("PETAO");
        zadateReci.add("MARKO");
        zadateReci.add("PETAR");
        zadateReci.add("JANKO");
        zadateReci.add("VANJA");

        
    }
    public static Kontroler getInstance() {
        if (instance == null) {
            instance = new Kontroler();
        }
        return instance;
    }

    public List<String> getZadateReci() {
        return zadateReci;
    }

    public void setZadateReci(List<String> zadateReci) {
        this.zadateReci = zadateReci;
    }

    public String getOdabranaRec() {
        return odabranaRec;
    }

    public void setOdabranaRec(String odabranaRec) {
        this.odabranaRec = odabranaRec;
    }
     public int brojPogodjenih(Slovo slovo) {
         List<Slovo> slova = new ArrayList<>();
         int brojac=0;
         char karakter = slovo.getSlovo();
         for(int i=0;i<odabranaRec.length();i++){
             if(odabranaRec.charAt(i)==karakter){
                 Slovo novoSlovo = new Slovo(i+1,karakter);
                 slova.add(novoSlovo);
                 brojPogodaka++;
                 brojac++;
                 //slovo.setPozicija(i+1);                 
             }
         }   
         //1234
         //TATA
         
         //(2,A) (4,A)
         
         if(slova.size()==0){
             slova.add(slovo);//pozicija==-1  
         }
         for (ObradaKlijentskihZahteva k : klijenti) {
                k.obavestiKlijenta(Operacije.POGADJAJ,slova);
         }
         return brojac;
     }
    public void proveraKrajaIgre( ) { 
         String poruka="";
        if(brojPogodaka==5){
           
            if(klijenti.get(0).getBrojPogodjeni()>klijenti.get(1).getBrojPogodjeni()){
                poruka = "POBEDIO IGRAC 1";
            }else{
                 poruka = "POBEDIO IGRAC 2";
            } 
        }else{
            if( klijenti.get(0).getBrojPokusaja()>=10 && klijenti.get(1).getBrojPokusaja()>=10){
                poruka = "KOMP JE POBEDIO";
            }
        }
        if(!poruka.isEmpty() || !poruka.equals("")){
            klijenti.get(0).obavestiKlijenta(Operacije.KRAJ_IGRE,poruka);
            klijenti.get(1).obavestiKlijenta(Operacije.KRAJ_IGRE,poruka);
            sf.prikaziPorukuKrajIGre(poruka);
        }
          
    }

    public List<ObradaKlijentskihZahteva> getKlijenti() {
        return klijenti;
    }

    public void setKlijenti(List<ObradaKlijentskihZahteva> klijenti) {
        this.klijenti = klijenti;
    }

    public int getBrojPogodaka() {
        return brojPogodaka;
    }

    public void setBrojPogodaka(int brojPogodaka) {
        this.brojPogodaka = brojPogodaka;
    }

    public ServerskaForma getSf() {
        return sf;
    }

    public void setSf(ServerskaForma sf) {
        this.sf = sf;
    }

    public void osveziLabeleNaFormi() {
        sf.osveziLabeleNaFormi();
    }

//Kontroler Klijent
 private static Kontroler instance;
    private KlijentskaForma kf;
    private Kontroler() {
    }

    public static Kontroler getInstance() {
        if(instance==null){
            instance= new Kontroler();
        }
        return instance;
    }

    public KlijentskaForma getKf() {
        return kf;
    }

    public void setKf(KlijentskaForma kf) {
        this.kf = kf;
    }

    public void pocelaIgra() {
        kf.pocelaIgra();
    }

    public void postaviSlovoPokusaj(List<Slovo> slova) { //(2,A) (4,A)
       if(slova.get(0).getPozicija()==-1){
           kf.nijePogodjeno();
       }else{
           kf.jestePogodjeno();
       }
        for (Slovo s : slova) {
             kf.postaviSlovoPokusaj(s);
        }
       
    }

    public void krajIgre(String poruka) {
        kf.krajIgre(poruka);
    }

//Dodatak za pokreni server
Socket s = serverskiSoket.accept();
               
broj++;
System.out.println("KLIJENT JE POVEZAN BROJ "+broj);
ObradaKlijentskihZahteva nit = new ObradaKlijentskihZahteva(s,broj);
Kontroler.getInstance().getKlijenti().add(nit);
nit.start(); 

//Obrada klijentskih zahteva dodatak
private int brojIgraca; //prvi ili drugi
    private int brojPokusaja=0;
    private int brojPogodjeni=0;
    public ObradaKlijentskihZahteva(Socket s,int brojIgraca) {
        this.s = s;
        this.brojIgraca = brojIgraca;
    }


//Cet
//Prikaz celog teksta poruke
JTable tabelaPoruka=(JTable) evt.getSource();
Point p=evt.getPoint();
int red=tabelaPoruka.rowAtPoint(p);
        
ModelTabelePoruka mtp=(ModelTabelePoruka) tblPoruke.getModel();
String tekst=mtp.getListaPoruka().get(red).getTekst();
        
JOptionPane.showMessageDialog(null, tekst);


//Kontroler
private static Kontroler instanca;
    private DBBroker db;
    private List<User> trenutnoUlogovaniKorisnici=new ArrayList<>();
    private Admin admin;//Da ne moramo da ga prosledjujemo preko konstruktora forme, vec preko metode za login
    
    public Kontroler() {
        db=new DBBroker();
    }
    
    public static Kontroler getInstanca()
    {
        if(instanca==null)
        {
            instanca=new Kontroler();
        }
        return instanca;
    }

    public boolean login(Admin admin1) {
        admin=db.login(admin1);
        if(admin==null)
        {
            return false;
        }
        return true;
    }
    
    public boolean proveriKorisnickoIme(String korisnickoIme) {
        return db.proveriKorisnickoIme(korisnickoIme);
    }

    public boolean unesiKorisnika(String korisnickoIme, String lozinka) {
        return db.unesiKorisnika(korisnickoIme, lozinka);
    }

    public List<Poruka> vratiPoruke() {
        return db.vratiPoruke();
    }

    public User loginUser(User user) {
        User u=db.loginUser(user);
        if(!trenutnoUlogovaniKorisnici.contains(u))
        {
            trenutnoUlogovaniKorisnici.add(u);
        }
        return u;
    }

    public void posaljiSvima(Poruka poruka) {
        db.posaljiSvima(poruka);
    }
  
    public void posaljiJednom(Poruka poruka) {
        db.posaljiJednom(poruka);
    }

    public Admin getAdmin() {
        return admin;
    }

    public void setAdmin(Admin admin) {
        this.admin = admin;
    }

    public List<User> getTrenutnoUlogovaniKorisnici() {
        return trenutnoUlogovaniKorisnici;
    }

    public void setTrenutnoUlogovaniKorisnici(List<User> trenutnoUlogovaniKorisnici) {
        this.trenutnoUlogovaniKorisnici = trenutnoUlogovaniKorisnici;
    }


//DBBroker login
public Admin login(Admin admin) {
        Admin a=null;
        try {
            String upit="SELECT * FROM admin WHERE korisnickoIme=? AND lozinka=?";
            PreparedStatement ps=Konekcija.getInstanca().getKonekcija().prepareStatement(upit);
            ps.setString(1, admin.getUsername());
            ps.setString(2, admin.getLozinka());
            
            ResultSet rs=ps.executeQuery();
            if(rs.next())
            {
                int adminID=rs.getInt("adminId");
                String ime=rs.getString("ime");
                String prezime=rs.getString("prezime");
                
                a=new Admin(adminID, admin.getUsername(), admin.getLozinka(), ime, prezime);
                System.out.println("Admin "+a);
                
                return a;
            } 
        } catch (SQLException ex) {
            Logger.getLogger(DBBroker.class.getName()).log(Level.SEVERE, null, ex);
        }
        return a;
    }

//PopuniTabelu
KlijentskiZahtev kz=new KlijentskiZahtev(Operacije.VRATI_ULOGOVANE_KORISNIKE, null);
        Komunikacija.getInstanca().posaljiZahtev(kz);
        
        ServerskiOdgovor so=Komunikacija.getInstanca().primiOdgovor();
        List<User> listaKorisnika=(List<User>) so.getOdgovor();
        
        ModelTabeleKorisnici mtk=new ModelTabeleKorisnici(listaKorisnika);
        tblKorisnici.setModel(mtk);


//Izvlacenje i property fajla
Properties probaj=new Properties();
        try {
            probaj.load(new FileInputStream("Probaj1.properties"));
        } catch (Exception ex) {
            Logger.getLogger(Proba.class.getName()).log(Level.SEVERE, null, ex);
        }
        Double sr=Double.parseDouble(probaj.getProperty("SREDNJI_KURS_NBS"));
        System.out.println("Srednji kurs je "+sr);

//Da se server pokrene kao konzolna aplikacija
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("Uneti dozvoljen broj klijenata");
        int limit=scanner.nextInt();
        Kontroler.getInstanca().setLimit(limit);
        PokreniServer ps=new PokreniServer();
        ps.start();
    }

//Pretvaranje iz Date u String  
dateFormat.format(nastavnik.getDatumOd());  
  
//Pretvaranje iz Stringa u Date  
s.parse(dateFormat.getTime());

//Pretvaraje sql u util datum java.sql.Date
datumSQL=rs.getDate("datum");
java.util.Date datum=new java.util.Date(datumSQL.getTime());

//Validacija forme
//Korisnicko ime samo slova
        boolean svaSlova=korisnickoIme.matches("[a-zA-Z]+");
        
        //Lozinka mora da sadrzi i cifru i slovo
        boolean imaCifru=lozinka.matches(".*[0-9].*");
        boolean imaSlovo=lozinka.matches(".*[a-zA-Z].*");
        
        //Korisnicko ime mora da bude jedinstveno
        boolean jedinstveno=Kontroler.getInstanca().proveriKorisnickoIme(korisnickoIme);
Leave a Comment