Package gui

Source Code of gui.ClientConnection

package gui;

import java.io.IOException;
import java.util.Vector;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DataElement;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import main.BTMIDlet;
import util.BTConnection;

// TODO UWAGA!!! Wszystkie wystapienia System.out.println() sa ignorowane przez telefon. Zastapic komunikatami Alert

/**
*
* @author TeXteR
*/
public class ClientConnection implements DiscoveryListener, CommandListener {

    private static final int SERVICE_NAME_BASE_LANGUAGE = 0x0100;
    private final String serviceUUID = "C7E0AF6060F111DFA08BC4732EF25ACD";
    private final int serviceAttributes[] = {SERVICE_NAME_BASE_LANGUAGE};
    private final Command backCommand;
    /**
     * Reprezentuje lokalne urzadzenie bluetooth
     */
    private LocalDevice localDevice;
    /**
     * Agent pozwalajacy odkryc urzadzenia dookola
     */
    private DiscoveryAgent discoveryAgent;
    /**
     * Kontener podobny do ArrayList. Przechowuje wykryte urzadzenia
     */
    private Vector discoveredDevices;
    /**
     * Przechowuje wykryte uslugi.
     */
    private Vector discoveredServices;
    /**
     * Form ktory pokazuje sie w czasie wyszukiwania urzadzen BT
     */
    private WaitingForm waitingForm;
    private BTMIDlet bTMIDlet;
    private Display display;
    /**
     * Lista wyswietlana na ekranie. Pojawiaja sie w niej nazwy wykrytych urzadzen.
     */
    private List discoveredList;

    public ClientConnection(BTMIDlet bTMIDlet) {
        this.bTMIDlet = bTMIDlet;
        backCommand = new Command("Back", Command.BACK, 1);
        display = bTMIDlet.getDisplay();
        waitingForm = new WaitingForm("Proszę czekać...");
        discoveredList = new List("Dostępne urządzenia:", List.IMPLICIT);
        discoveredList.addCommand(backCommand);
        discoveredList.setCommandListener(this);
        discoveredDevices = new Vector();
        discoveredServices = new Vector();
        initBT();
        searchDevices();
    }

    /**
     * Inicjuje wszystkie pola potrzebne do rozpoczecia wyszukiwania urzadzen w poblizu
     */
    private void initBT() {
        try {
            // Pobranie obiektu urzadzenia lokalnego
            localDevice = LocalDevice.getLocalDevice();
            // Pobranie agenta pozwalajacego wyszukiwac urzadzenia
            discoveryAgent = localDevice.getDiscoveryAgent();
        } catch (BluetoothStateException bse) {
            System.out.println(bse.getMessage());
        }
    }

    /**
     * Rozpoczyna wyszukiwanie urzadzen
     */
    private void searchDevices() {
        try {
            // Ustawiamy jako aktywny ekran oczekiwania
            display.setCurrent(waitingForm);
            // Rozpoczynamy wyszukiwanie urzadzen w poblizu
            discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);
            // Startujemy timer uruchamiajacy animacje paska
            waitingForm.start();
        } catch (BluetoothStateException bse) {
            System.out.println(bse.getMessage());
        }
    }

    public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
        // Jesli wykryto urzadzenie, dodajemy je do kolekcji urzadzen
        discoveredDevices.addElement(btDevice);
        try {
            // Do listy dodajemy nazwe urzadzenia
            discoveredList.append(btDevice.getFriendlyName(true), null);
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

    /**
     * Wystepuje po zakonczeniu wyszukiwania urzadzen.
     * @param discType
     */
    public void inquiryCompleted(int discType) {
        // Zatrzymujemy pasek oczekiwania na polaczenie
        waitingForm.stop();
        // Wyswietlamy liste urzadzen
        display.setCurrent(discoveredList);
    }

    /**
     * Wystepuje gdy znaleziono usluge.
     * @param transID
     * @param servRecord
     */
    public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
        // Pobieramy sobie usluge. Mechanizm jak w MHP co jest ciekawe :D
        ServiceRecord serviceRecord = servRecord[0];

        // Dodajemy usluge do kolekcji. Do wykorzystania potem, potem, potem....
        discoveredServices.addElement(serviceRecord);

        try {
            // W tym miejscu nawiazuje sie polaczenie z serwerem.
            //TODO wyjebac stad i stworzyc klase agregujaca polacenie miedzy serwerem a klientem
            StreamConnection conn = (StreamConnection) Connector.open(serviceRecord.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false));
            new MessagingForm(bTMIDlet, new BTConnection(conn));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Wystepuje gdy zakonczono wyszukiwac uslugi.
     * @param transID
     * @param respCode
     */
    public void serviceSearchCompleted(int transID, int respCode) {

        ServiceRecord serviceRecord;
        DataElement dataElement;

        waitingForm.stop();

        // Jeszcze nie wiem co to robi i po co to. Mozliwe ze pozniej tego nie bedzie. Nie uzywane tutaj.
        for(int i = 0; i < discoveredServices.size(); i++) {
            serviceRecord = (ServiceRecord) discoveredServices.elementAt(i);
            dataElement = serviceRecord.getAttributeValue(SERVICE_NAME_BASE_LANGUAGE);
            discoveredList.append((String) dataElement.getValue(), null);
        }
    }

    public void commandAction(Command c, Displayable d) {
        if (c.equals(backCommand)) {
            bTMIDlet.showMenu();
        }

        // Jesli nie jest pokazywany ekran oczekiwania
        if (!waitingForm.isShown()) {
            int selectedItem = discoveredList.getSelectedIndex();
            // i jesli wcisnieto select
            if (c.getCommandType() == Command.SCREEN) {
                // Tworzymy tablice UUID. Potrzebne do laczenia - info o usludze
                UUID[] uuids = new UUID[]{new UUID(serviceUUID, false)};
                try {
                    // Wyszukujemy uslug, dla urzadzenia ktore zostalo zaznaczone na liscie urzadzen.
                    discoveryAgent.searchServices(serviceAttributes, uuids, (RemoteDevice) discoveredDevices.elementAt(selectedItem), this);
                } catch (BluetoothStateException ex) {
                    System.out.println(ex.getMessage());
                }
            }
        }
    }
}
TOP

Related Classes of gui.ClientConnection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.