MyMouse para desarrolladores (Windows)

Gracias por descargar MyMouse. Esta guía le servirá para familiarizarse con los lenguajes, procedimientos y las variables necesarias para que usted, desarrollador, pueda encontrar en MyMouse una herramienta para la creación de aplicaciones geniales y distintas. MyMouse para Windows utiliza la técnica de programación llamada “Named Pipes” o “Tuberías con nombre” que le ayuda a compartir sus datos. Esta técnica permite a dos procesos en una misma maquina o de diferentes maquinas conectadas compartir mensajes entre procesos para comunicarse.

Las principales características de una tubería con nombre son:

No vamos a profundizar en los conceptos de una tubería con nombre, estamos seguros que en la web existe mucha información al respecto, por ese motivo escogimos esta técnica ya que proporciona flexibilidad para trabajar con distintos lenguajes de programación con distintos procedimientos para el logro de una conexión. En esta guía sugerimos algunos procedimientos para que le sea fácil el desarrollo de sus aplicaciones, pero usted puede sentirse libre de utilizar cualquier técnica que le guste.

Panel compartir

Para mostrar este panel, una vez realizada la conexión con la aplicación para celulares inteligentes se debe hacer click derecho en el icono de MyMouse en la que se estableció la conexión y en el menú contextual hacer click en la opción “Show Share panel” inmediatamente se desplegara el panel con la información de las variables con las que se debe interactuar.

MyMouse

Nota: La opcion “Reset Share” se utiliza para resetear las conexiones si se nota que existe algun problema. Generalmente estos errores se producen cuando no se cierra o no se liberan los recuursos de la conexión correctamente en el lado del Cliente, tenga mucho cuidado de cerrar todas las conexiones utilizadas.

MyMouse
Descripción de las variables
MyMouse

MyMouse utiliza cuatro nombres por cada mouse para establecer las conexiones, estas conexiones son independientes, es decir, que puede conectarse a cada una de manera autónoma, pero recomendamos que siempre establezca la conexión con ‘mymouse_one_send_state’ y/o ‘mymouse_two_send_state’ para controlar si existiera algún error en el vínculo.

Nombres para las conexiones:

mymouse_one_send_state y/o mymouse_two_send_state: Controla el estado de la conexión, sus valores son:

mymouse_one_send_x_y y/o mymouse_two_send_x_y: Controla la posición x,y de los sensores. Estos valores vienen concatenados y separado con el carácter ‘,’ para utilizarlos de manera independiente es necesario una función de desconcatenación, sus valores son:

mymouse_one_send_click y/o mymouse_two_send_click: Controla las teclas de la rueda, izquierda y derecha de MyMouse. Sus valores son:

mymouse_one_send_key y/o mymouse_two_send_key: Controla las teclas del teclado de MyMouse, cada tecla puede contener hasta tres valores. Sus valores son:

Los iconos debajo de la tabla, muestran los estados de la conexión de cada mouse.

A continuación, sugerimos las siguientes líneas de código para establecer la conexión en distintos lenguajes de programación:

    public static void main(String[ ] arg) 
    {
      final String dir = "\\\\.\\pipe\\mymouse_one_send_state";
      String res;

      try {
          // Connect to the named pipe
          RandomAccessFile pipe = new RandomAccessFile(dir, "r");
        
          while (null != (res = pipe.readLine())) 
          {
             System.out.println(res);
          }
          
          // Close the pipe
          pipe.close();
      }
      catch (Exception e) 
      {
        // TODO Auto-generated catch block
        e.printStackTrace(); 
      }      
    }         
              
        #include 'iostream'
        #include 'windows.h'
        
        HANDLE pipe;
        
        int main(int argc, const char **argv)
        {
            cout << "Connecting to pipe..." << endl;
            // Open the named pipe
            // Most of these parameters aren't very relevant for pipes.
            pipe = CreateFileW(
                L"\\\\.\\pipe\\mymouse_one_send_state",
                GENERIC_READ, // only need read access
                FILE_SHARE_READ,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL
            );
            if (pipe == INVALID_HANDLE_VALUE) {
                cout << "Failed to connect to pipe." << endl;
                // look up error code here using GetLastError()
                return 1;
            }
            
            cout << "Reading data from pipe..." << endl;
            
            while(true)
            {
              // The read operation will block until there is data to read
              char buffer[128];
              DWORD numBytesRead = 0;
              BOOL result = ReadFile(
                  pipe,
                  buffer, // the data from the pipe will be put here
                  127 * sizeof(char), // number of bytes allocated
                  &numBytesRead, // this will store number of bytes actually read
                  NULL // not using overlapped IO
              );
              if (result) 
              {
                  buffer[numBytesRead / sizeof(char)] = '\0'; // null terminate the string
                  cout << "Number of bytes read: " << numBytesRead << endl;
                  cout << "Message: " << buffer << endl;
              } 
              else 
              {
                  cout << "Failed to read data from the pipe." << endl;
                  break;
              }
            }
          
          // Close our pipe handle
          FlushFileBuffers(pipe);
          CloseHandle(pipe);
          cout << "Done." << endl;
          return 0;
        }
    private void readStateMouseOne()
    {
      pipeState = new NamedPipeClientStream(".", "mymouse_one_send_state", PipeDirection.In, PipeOptions.None);
    
      try
      {
        // Connect to the pipe or wait until the pipe is available.
        pipeState.Connect();
    
        srState = new StreamReader(pipeState);
        
        while (pipeState.IsConnected)
        {
          // Display the read
          String state = srState.ReadLine();
          Debug.WriteLine(state);
        }
        srState.Close();
        pipeState.Dispose();
        pipeState.Close();
        pipeState = null;
      }
      catch (Exception ex)
      {
        Debug.WriteLine("Error: " + ex.ToString());
      }
      finally
      {
        if (pipeState != null)
        {
          pipeState.Dispose();
          pipeState.Close();
          pipeState = null;
        }
      }
    }
MyMouse para desarrolladores (Android)

MyMouse para androidTV utiliza la técnica de programación llamada “Broadcast Receiver”. Un Broadcast Receiver puede verse como un listener que atiende a eventos del sistema, esto es, lanzados por el sistema operativo, o bien a eventos lanzados por aplicaciones. Además, el evento puede incluir información adicional en un Intent. Nos encontramos por tanto ante un mecanismo que nos permitirá integrar aplicaciones entre sí y/o con Android, pero también establecer un canal de comunicación interno entre componentes de una misma app.

No vamos a profundizar en los conceptos de un Broadcast Receiver, estamos seguros que en la web existe mucha información al respecto y por ese motivo escogimos esta técnica en Android ya que proporciona flexibilidad para el logro de una conexión entre Intens. En esta guía sugerimos algunos procedimientos para que le sea fácil el desarrollo de sus aplicaciones, pero usted puede sentirse libre de utilizar cualquier técnica que le guste.

Panel compartir

Para mostrar este panel, una vez realizada la conexión con la aplicación para celulares inteligentes se debe seleccionar en el menú del icono en la que se estableció la conexión la opción “SHARE” inmediatamente se desplegara el panel con la información de las variables con las que se debe interactuar.

MyMouse
Descripción de las variables

MyMouse utiliza cuatro nombres por cada mouse para establecer las conexiones, estas conexiones son independientes, es decir, que puede conectarse a cada una de manera autónoma, pero recomendamos que siempre establezca la conexión con ‘mymouse_one_send_state’ y/o ‘mymouse_two_send_state’ para controlar si existiera algún error en el vínculo.

A diferencia de la aplicación para Windows, los nombres de las variables de sus procedimientos deben ser idénticos a los descritos en el panel.

Nombres para las conexiones:

mymouse_one_send_state y/o mymouse_two_send_state: Controla el estado de la conexión, sus valores son:

mymouse_one_send_x_y y/o mymouse_two_send_x_y: Controla la posición x,y de los sensores. Estos valores vienen concatenados y separado con el carácter ‘,’ para utilizarlos de manera independiente es necesario una función de desconcatenación, sus valores son:

mymouse_one_send_click y/o mymouse_two_send_click: Controla las teclas de la rueda, izquierda y derecha de MyMouse. Sus valores son:

mymouse_one_send_key y/o mymouse_two_send_key: Controla las teclas del teclado de MyMouse, cada tecla puede contener hasta tres valores. Sus valores son:

A continuación, sugerimos las siguientes líneas de código para establecer la conexión con la técnica Broadcast Receiver:

    //create IntentFilter and register the receiver
    IntentFilter filterState = new IntentFilter();
    filterState.addAction("mymouse_one_send_state");
    getApplicationContext().registerReceiver(new SampleReceiverMyMouseOneState(), filterState);


    //create SampleReceiverMyMouseOneState.java
    public class SampleReceiverMyMouseOneState extends BroadcastReceiver 
    {
      @Override
      public void onReceive(Context context, Intent intent) 
      {
          if ("mymouse_one_send_state".equals(intent.getAction())) 
          {
              String state = intent.getStringExtra("state");
              Log.i("stateMyMouseOne", state);
          }
      }
    }

Estamos contentos de trabajar juntos, nuestro compromiso es de mantenernos siempre actualizados para que disfrutes el desarrollo con las herramientas de MyMouse.

Muchas gracias.