Después de una completa reingeniería del midlet (aplicando correctamente el patrón observador sobre el módulo de conexión, vuelvo a la carga con un poco de documentación). Como anotación a los cambios realizados, indico que ahora, el módulo de conexion, cada vez que abre un socket, crea un thread dedicado a este, y no son los managers de almacenado los que se encargan de crerlo. Cuando en uno de estos threads se genera un evento, se dispara, y se avisa a todos los listers del módulo de conexion. Un lujazo, vamos xD.
La idea para postear en los foros de moodle, como ya he comentado con anterioridad, reside en simular el comportamiento de un navegador web, al enviar un formulario HTML.
Para postear en un foro, necesitamos, en primer lugar, hacer login correctamente, y luego, conocer todos los datos necesarios para poder enviar al método Post.PHP todo lo que necesita para colgar algo en un thread, es decir, curso, id del foro, id del thread, padre del thread (el mismo que el anterior, si queremos contestar a un tema de discusión y no a una respuesta de alguien), id del usuario, y por último, el título del post, y su contenido (por el momento, aparcamos el tema de añadir attachs y cosas por el estilo ;) ).
El proceso, sería más o menos el que sigue:
- 1. Obtener cookies de sesión (abriendo una conexión al servidor de moodle, para que nos envíe las cookies correspondientes), las almacenamos, y lanzamos un evento de conexión indicandolo a todos nuestros listeners.
2. Recogemos el evento desde el módulo deseado, e iniciamos la acción de hacer login, añadiendo a la cabecera del socket las propiedades necesarias (content-type, cookies, etc...) y configurándolo como post. Una vez establecida la conexión, enviamos por el outputStream el username y el password de nuestro usuario.
3. Añadimos la cookie de id que nos retorna el servidor mediante el inputStream a nuestro repositorio (y es esta, además de la de sesión la que usaremos para posteriores conexiones...). Lanzamos un evento que notifique de esto a todos nuestros listeners.
4. Recogemos el evento generado por el módulo de conexión que indica que ya estamos logeados, y abrimos un socket con llamada al método post.php del módulo de los foros de moodle, configurado como Post, y con la cabecera adecuadamente configurada (Content-type, User-Agent, cookies, etc...). Enviamos por el OutputStream un mensaje con todos los campos que se generarian en el formulario HTML que moodle usa para contestar a los foros. Es decir, algo como lo que sigue "course=2&forum=1&discussion=3&parent=3&userid=3&subject=Hola&message=Hola, este mensaje se ha enviado desde un midlet." enviaría el mensaje ("Hola","Hola, este...") como respuesta del usuario 3 al thread 3 del foro 1 del curso 2 de un moodle.
Y en principio, esto es todo. Añadiré unas pantallas que certifiquen que esto funciona. Pero ahora el problema reside en, cómo obtener todos los datos necesarios de un thread para poder contestar... podria parsear el link que contiene el fichero rss, pero sería algo muy muy chapucero. La id del usuario me la puede proporcionar el webservice. El resto... a ver que me propone Marc...









