Epitech MicroNet

MicroNet est un client iOS (et bientôt Android !) permettant d’accéder à l’Intranet de l’école Epitech. Il est développé en C# et utilise le framework Xamarin (anciennement Monotouch) pour générer du code natif.
Le code utilise l’abstraction de Xamarin.Forms pour déclarer des interfaces “Device agnostic” : le même code compile pour Android, Windows Phone et iOS (voir OSX et Windows) en utilisant les API de chaque OS.

Xamarin est gratuit pour les étudiants !

Note:


Screenshots

Profil Projet Trombi Planning Notifications E-Learning

Fonctionnalités


Le code

La solutions se compose de trois projets :

Note:

Vous devez compiler OxyPlot avec la solution. OxyPlot est un super projet open-source pour tracer des graph. Vous pouvez aussi utiliser le paquet NuGet.

Ajouter une fonctionnalité d’API

Voici un exemple d’appel à l’intra pour récupérer le json de la page d’accueil :

    public async Task<Welcome> GetWelcome ()
    {
        //Déclaration du client http.
        HttpClient client = new HttpClient ();

        try {
            //Envoi de la requête (GetHeader : génération d'un header avec les identifiants de l'utilisateur).
            var result = await client.PostAsync (buildUri ("/"), GetHeader ());
            //On retourne l'objet JSON désérialisé via Json.Net ou null si l'appel n'a pas abouti.
            return !result.IsSuccessStatusCode ? null : Newtonsoft.Json.JsonConvert.DeserializeObject<Welcome> (await result.Content.ReadAsStringAsync ());
        } catch (Exception e) {
            //Si il y a une erreur, on la throw sur la pile d'appel.
            throw new Exception ("Impossible de récupérer le message de bienvenue", e);
        }
    }

Cette fonction demande la ressource “/” (c’est à dire http://intra.epitech.eu/), puis converti le json de la réponse en un objet Welcome via la fonction DeserializeObject(string jsoncontent). Les appels susceptibles de générer des erreurs sont entourés de try-catch. Les exceptions sont renvoyés à la fonction appelante si lieu.

Note:

La fonction retourne un type Task<Welcome>, elle est donc non bloquante. Toute les fonction de l’API doivent respecter ce format.

Maintenant, il ne reste plus qu’a consumer l’API via ces fonctions.

Le système de page et les appels à l’API

Toutes les pages d’interface utilisateur (présentent dans Epitech.Intra.SharedApp.Views) héritent de la classe IntraPage qui définit la gestion des données, l’invalidation et qui appelle les fonctions d’API si besoin. Son fonctionnement ressemble à ceci :

Created with Raphaël 2.1.2PagePageIntraPageIntraPageAPIAPIintra.epitech.euintra.epitech.euInitIntraPageRefreshDataAppel de fonctionrequêteréponse de l'intraDisplayContent || DisplayError

Pour l’utiliser, il faut d’abord appeller la fonction

InitIntraPage (Type type, Func<Task<object>> function, TimeSpan dataInvalidation);

Le premier paramètre est un typeof de la classe de la page, le second un pointeur sur la fonction d’API voulu et le troisième un TimeSpan d’invalidation des données. Une surcharge de cette fonction existe et permet d’ajouter un quatrième paramètre pour passer une string à la fonction d’API. Par exemple pour la page du profil l’appel est :

// Ma page est de type "Profile", la fonction est GetUser, les données s'invalident après 1 heure et le login de mon utilisateur est TargetUser.
InitIntraPage (typeof(Profile), App.API.GetUser, new TimeSpan (1, 0, 0), TargetUser);

L’appel à cette fonction doit se faire avant tout autre, de préférence dans le constructeur de la classe.

La classe IntraPage définit deux fonctions pouvant être override par la classe fille :

Elle définit aussi deux fonctions publiques :

Ainsi, pour obtenir les données d’une page, il faut appeler la fonction RefreshData. Cette fonction se charge de tout : verifier l’invalidation des données locale si lieu et fetch via l’API REST d’Epitech si besoin. Une fois les données disponible, RefreshData appellera automatiquement la fonction DisplayContent et il ne vous reste plus qu’à afficher les données. Si une erreur se produit, elle appellera DisplayError.

Note:
Pour toujours afficher à l’utilisateur les données les plus récentes, il est conseillé d’overrider la fonction OnAppearing ()des pages et d’y mettre son appel à RefreshData.

Ce système permet de créer des pages très vite sans ce soucier de comment les données sont gérés, ou même de la gestions des erreurs de l’API, l’objet IntraPage le gère une fois pour toute. De plus, il permet de garder dans les pages un code simple et concis, orienté sur les données, le travail compliqué ce faisant ailleurs.


Contact

Je suis joignable à l’adresse hippolyte.barraud@epitech.eu si vous avez des questions sur l’app ou sur le développement via Xamarin, ou plus généralement sur c# !

Important:

Si quelqu’un est doué en graphisme, ou plus généralement à un gout pour l’esthétisme plus prononcé que moi (ce sera pas dûr), il est le bienvenu ! Actuellement, la beauté du code ne se reflète pas vraiment sur l’interface… enter image description here


Index