Un multi-client-eco exemple d

Un multi-client-eco exemple d'application.


L'application que nous allons construire peut être utilisé pour capturer des temps de travail et les pauses pendant le temps de travail. Le temps de travail peut être capturé avec plusieurs clients et le serveur d'application fournit une vue d'ensemble des données saisies.
[La partie client]

Vous commencez avec la mise en place d'un winform eco application. Cette application est le client. Je l'ai appelé il WorkTimeClient.
Vous devez avoir de l'UML Classes dans un paquet, de sorte que vous pouvez ajouter plus tard sur le serveur de l'application.
Nouveau Fichier - ECO Paquetage UML
Créer le modèle suivant:

temps de travail Modèle

temps de travail et de pause café sont des classes spécialisées d'une plage de temps. Un temps de travail peut avoir plusieurs breaktimes.
L'opération calcTotal donne en retour, le temps d'un temps de travail réduit du cumul des timespans de la breaktimes. Le résultat de calctotal est définie dans le diff attribut du temps de travail de la classe. Assurez-vous de modifier les classes selon les extraits de code suivant:

la fonction timestartend.calcTotal(): plage de Temps
begin
Result := Timespan(de Soi.endtime-Auto.starttime)
fin
fonction de temps de travail.calcTotal(): plage de Temps
var
ib: IbreaktimeList
i: Integer
begin
ib := get_breaktime
for i := 0 ib.Count-1 do begin
Self.diff := Self.diff - ib.Élément[i].calcTotal
fin
fin de la fonction pause café.get_diff: plage de Temps
begin
// Si vous ajoutez du code d'utilisateur, veuillez supprimer le [EcoAutoMaintained] l'attribut
// à partir de la déclaration de la propriété dans la section de l'interface
Result := Timespan(de Soi._endtime-Auto._starttime)
fin de la fonction de temps de travail.get_diff: plage de Temps
begin
// Si vous ajoutez du code d'utilisateur, veuillez supprimer le [EcoAutoMaintained] l'attribut
// à partir de la déclaration de la propriété dans la section de l'interface
Result := TimeSpan(de Soi._endtime - Auto._starttime)
fin

Maintenant compiler l'application, allez à l'ecospace de designer et de l'ajouter à l'ecospace. Mettre un PersistenceMapperXml composant sur l'ecospace de sorte que vous pouvez développer le client sans avoir besoin pour la partie serveur jusqu'à présent. Définir le nom de fichier de la persistencemapper à data.xml ou que ce soit des suites de vous.
maintenant passer à la winform et de créer une interface similaire à ceci:WorkTimeClient Frontend
Ajouter deux expression des poignées et de la Monnaie Gestionnaire de Poignées pour les datagrids.
afin d'avoir la dernière ligne de la grille de données sélectionné, placez le code suivant dans les datagrids événement de Peinture:

procédure TWinForm.DataGrid1_Paint(sender: Système.Objet e: Système.De Windows.Les formulaires.PaintEventArgs)
begin
DataGrid1.BindingContext[dataGrid1.Source de données,
dataGrid1.DataMember].Position := ehWorkTime.GetList.Le comte
cmhWorktime.Position := ehWorkTime.GetList.Le comte
fin

Il y aurait sans doute pu être plus intelligent endroits pour mettre il – mais je ne les connais pas -)
Mais s'il vous plaît laissez-moi savoir dans le cas où vous savez.
Pour le seul client de test de l'application, vous pouvez simplement affecter la mise à Jour de la Base de données du programme Écoaction à la mise à Jour de la DB Bouton – alors que dans le Multi paramètre Client, vous devez le code suivant:

var
c: IChange
begin
EcoSpace.PersistenceService.RetrieveChanges
pour c dans EcoSpace.PersistenceService.GetChanges ne
si c.IsDirectConflict alors c.Action := ChangeActionKind.Jeter le reste
c.Action := ChangeActionKind.Garder
EcoSpace.PersistenceService.ApplyAllChanges
fin

Ce code récupère via l'EcoSpace de la persistance de service de tous les persisté changements. Il pourrait dans un multi-client environnement arriver que quelqu'un a changé les données que vous aviez déjà été en train de changer dans votre local ecospace cache. La persistance de service vous donne la possibilité de gérer les conflits découlant si c'est le cas. J'notre cas (loging temps de travail), il ne devrait pas arriver si.
Néanmoins, après avoir récupéré les modifications que vous marchez par le biais de ... en boucle sur eux pour vérifier si vous avez un conflit ou non. Vous devez définir pour chaque IChange de l'interface dans le GetChanges-liste de l'action pour être utilisé lors de la ApplyAllChanges procédure est appelée.
Si vous avez terminé le client de cette façon, la seule chose qui reste à l'activer pour le client-serveur est de changer le persistencemapper. Nous avons besoin d'un PersistenceMapperClient composant sur notre ECOSpace puisque ce n'est pas sur l'ÉCO Componet Palette par défaut. Nous avons pour l'ajouter comme suit:

  • clic droit sur la Palette d'outils et choisissez “Installé .NET des composants” dans le menu contextuel.

Ajout de la peristence mappeur client
Puis faites-la glisser à l'éco catégorie.
Supprimer le PersistenceMapperXML client de l'ecospace et déposer les PersistenceMapperClient sur elle. Définissez la propriété url “tcp://localhost:8000/TestServer1” – puisque nous aurons le serveur le client s'exécutant sur notre machine locale avant le déploiement.


Enregistrez le projet et de le fermer ou de le laisser ouvert si vous voulez avoir le client et le serveur dans un groupe de projet. Car il ne fonctionnera pas tant que nous avons notre serveur développés et en cours d'exécution parce que le socket de la peristencemapperclient tente de se connecter à ne pas être enregistré.

[serveur]

Créer un ÉCO winform projet. Je l'ai appelé il WorkTimeServer.
Ajoutez le temps de travail des classes, et de la persistance de mappeur de fournisseur de:

Ajout de l

Dans notre exemple, nous utilisons des bases de données Interbase avec la BDP. Alors déposez un PersistenceMapperBdp et un BdpConnection composant sur le PersistanceMapperProvider ECOSpace. Configurer le PersistenceMapperBDP pour Interbase et configurer la connexion de la BDPConnection en fonction de votre environnement local. Il vous suffit de configurer une base de données vide. Les tables seront créées plus tard par la persistance de mappeur de fournisseur.
Aller à l'ecospace (pas le persistencemapperprovider mais l'un est connecté à la winform) et sélectionnez le temps de travail d'un package à partir de la liste des packages disponibles:

Ajouter le temps de travail calsses
Compiler le projet et de choisir le EcoSpaceType à être utilisé pour la persistance de mappeur de fournisseur. (Cliquez sur la surface de la persistance de mappeur de fournisseur et de le sélectionner dans la liste déroulante dans l'inspecteur d'objet).
Vous pouvez maintenant cliquer sur créer le Schéma bouton au bas de la EcoPersistanceMapper Fournisseur. Le résultat devrait ressembler à ceci:

ÉCO createt DB Cartographie
Vous avez maintenant commenter le code pour l'accès distant dans la persistance de mappeur de fournisseur. N'oubliez pas de décommenter la déclaration de la procédure et à ajouter la mise en œuvre utilise-comme énoncé dans les commentaires.

// Exemple de code pour enregistrer le fournisseur en tant que serveur à l'aide de
// binaire de mise en forme sur un canal TCP.
// ajouter les éléments suivants à votre niveau de mise en œuvre utilise-déclaration de décommenter le code
// System.Moment de l'exécution.La sérialisation.Formateurs, Système.Moment de l'exécution.Accès À Distance Au Système.Moment de l'exécution.L'accès distant.Canaux, Système.Moment de l'exécution.L'accès distant.Les canaux.Tcp classe de procédure TEcoPersistenceMapperProvider.RegisterTcpServer(Port: entier)
var
fournisseur de: BinaryServerFormatterSinkProvider
accessoires: IDictionary
chan: TcpChannel
begin
fournisseur := BinaryServerFormatterSinkProvider.Créer
fournisseur.TypeFilterLevel := TypeFilterLevel.Complet // Nécessaire pour serializations
accessoires := table de hachage.Créer
accessoires['port'] := Port
chan := TcpChannel.Créer(accessoires, néant, fournisseur)
ChannelServices.RegisterChannel(chan)
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(TEcoPersistenceMapperProvider),
'TestServer1',
WellKnownObjectMode.Singleton)
fin

Pour terminer la configuration de la Persistance de Mappeur de Fournisseur de définir l'attribut SyncActive de vrai. Vous pouvez également augmenter la valeur des attributs MaxOpenConnections et MaxPoolConnections si vous avez beaucoup de clients se connectant au serveur.
Maintenant, ajoutez un PersistanceMapperClient à l'Ecospace. Définissez la propriété url de tcp://localhost:8000/TestServer1 ou si vous avez changé le RegisterTCPServer procédure pour les valeurs que vous avez fournis.
Nous avons d'appeler le RegisterTCPServer composant avant de le PersistenceMapperClient est initialisé. Pour ce faire modifier le constructeur de la EcoSpace comme suit:

constructeur TWorkTimeServerEcoSpace.Créer
begin
hérité de Créer
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer(8000)
InitializeComponent
// TODO: Ajouter de tout constructeur code ici
fin

Le serveur de la partie est d'ores et déjà pleinement fonctionnel. Pour ajouter un aperçu des données fournies par nos clients, nous avons créer le frontend:
Serveur Frontend
Dans le timer tick événement vous code le Service de Persistance de code déjà connu de la part du client:

procédure TWinForm.Timer1_Tick(sender: Système.Objet e: Système.EventArgs)
var
c: IChange
begin
EcoSpace.PersistenceService.RetrieveChanges
pour c dans EcoSpace.PersistenceService.GetChanges ne
si c.IsDirectConflict alors c.Action := ChangeActionKind.Jeter le reste
c.Action := ChangeActionKind.Garder
EcoSpace.PersistenceService.ApplyAllChanges
fin

Réglez la minuterie propriété enabled à true. Enregistrer et démarrer le projet et de le détacher de Delphi.

Détacher programme de Delphes

Ouvrir le projet du client, de nouveau. Démarrer le projet du client, de le détacher et de commencer un deuxième client. Changer le nom d'utilisateur dans le deuxième client et de l'expérience. Il doit être au travail et il est très facile une fois atteint - ECO peut vous faire vraiment plaisir.
s'il vous Plaît laissez-moi savoir si j'ai raté quelques étapes importantes pour la compréhension de comment le faire ou si j'ai fait quelque chose de pas la meilleure pratique comme. Je vais modifier l'article en fonction de vos commentaires.

  1. Le samplecode le serveur et le client peut être trouvé ici.

& nbsp







Un multi-client-eco exemple d'application.


Un multi-client-eco exemple d'application. : Plusieurs milliers de conseils pour vous faciliter la vie.


L'application que nous allons construire peut etre utilise pour capturer des temps de travail et les pauses pendant le temps de travail. Le temps de travail peut etre capture avec plusieurs clients et le serveur d'application fournit une vue d'ensemble des donnees saisies.
[La partie client]

Vous commencez avec la mise en place d'un winform eco application. Cette application est le client. Je l'ai appele il WorkTimeClient.
Vous devez avoir de l'UML Classes dans un paquet, de sorte que vous pouvez ajouter plus tard sur le serveur de l'application.
Nouveau Fichier - ECO Paquetage UML
Creer le modele suivant:

temps de travail Modele

temps de travail et de pause cafe sont des classes specialisees d'une plage de temps. Un temps de travail peut avoir plusieurs breaktimes.
L'operation calcTotal donne en retour, le temps d'un temps de travail reduit du cumul des timespans de la breaktimes. Le resultat de calctotal est definie dans le diff attribut du temps de travail de la classe. Assurez-vous de modifier les classes selon les extraits de code suivant:

la fonction timestartend.calcTotal(): plage de Temps
begin
Result := Timespan(de Soi.endtime-Auto.starttime)
fin
fonction de temps de travail.calcTotal(): plage de Temps
var
ib: IbreaktimeList
i: Integer
begin
ib := get_breaktime
for i := 0 ib.Count-1 do begin
Self.diff := Self.diff - ib.Element[i].calcTotal
fin
fin de la fonction pause cafe.get_diff: plage de Temps
begin
// Si vous ajoutez du code d'utilisateur, veuillez supprimer le [EcoAutoMaintained] l'attribut
// a partir de la declaration de la propriete dans la section de l'interface
Result := Timespan(de Soi._endtime-Auto._starttime)
fin de la fonction de temps de travail.get_diff: plage de Temps
begin
// Si vous ajoutez du code d'utilisateur, veuillez supprimer le [EcoAutoMaintained] l'attribut
// a partir de la declaration de la propriete dans la section de l'interface
Result := TimeSpan(de Soi._endtime - Auto._starttime)
fin

Maintenant compiler l'application, allez a l'ecospace de designer et de l'ajouter a l'ecospace. Mettre un PersistenceMapperXml composant sur l'ecospace de sorte que vous pouvez developper le client sans avoir besoin pour la partie serveur jusqu'a present. Definir le nom de fichier de la persistencemapper a data.xml ou que ce soit des suites de vous.
maintenant passer a la winform et de creer une interface similaire a ceci:WorkTimeClient Frontend
Ajouter deux expression des poignees et de la Monnaie Gestionnaire de Poignees pour les datagrids.
afin d'avoir la derniere ligne de la grille de donnees selectionne, placez le code suivant dans les datagrids evenement de Peinture:

procedure TWinForm.DataGrid1_Paint(sender: Systeme.Objet e: Systeme.De Windows.Les formulaires.PaintEventArgs)
begin
DataGrid1.BindingContext[dataGrid1.Source de donnees,
dataGrid1.DataMember].Position := ehWorkTime.GetList.Le comte
cmhWorktime.Position := ehWorkTime.GetList.Le comte
fin

Il y aurait sans doute pu etre plus intelligent endroits pour mettre il – mais je ne les connais pas -)
Mais s'il vous plaît laissez-moi savoir dans le cas ou vous savez.
Pour le seul client de test de l'application, vous pouvez simplement affecter la mise a Jour de la Base de donnees du programme Ecoaction a la mise a Jour de la DB Bouton – alors que dans le Multi parametre Client, vous devez le code suivant:

var
c: IChange
begin
EcoSpace.PersistenceService.RetrieveChanges
pour c dans EcoSpace.PersistenceService.GetChanges ne
si c.IsDirectConflict alors c.Action := ChangeActionKind.Jeter le reste
c.Action := ChangeActionKind.Garder
EcoSpace.PersistenceService.ApplyAllChanges
fin

Ce code recupere via l'EcoSpace de la persistance de service de tous les persiste changements. Il pourrait dans un multi-client environnement arriver que quelqu'un a change les donnees que vous aviez deja ete en train de changer dans votre local ecospace cache. La persistance de service vous donne la possibilite de gerer les conflits decoulant si c'est le cas. J'notre cas (loging temps de travail), il ne devrait pas arriver si.
Neanmoins, apres avoir recupere les modifications que vous marchez par le biais de ... en boucle sur eux pour verifier si vous avez un conflit ou non. Vous devez definir pour chaque IChange de l'interface dans le GetChanges-liste de l'action pour etre utilise lors de la ApplyAllChanges procedure est appelee.
Si vous avez termine le client de cette façon, la seule chose qui reste a l'activer pour le client-serveur est de changer le persistencemapper. Nous avons besoin d'un PersistenceMapperClient composant sur notre ECOSpace puisque ce n'est pas sur l'ECO Componet Palette par defaut. Nous avons pour l'ajouter comme suit:

  • clic droit sur la Palette d'outils et choisissez “Installe .NET des composants” dans le menu contextuel.

Ajout de la peristence mappeur client
Puis faites-la glisser a l'eco categorie.
Supprimer le PersistenceMapperXML client de l'ecospace et deposer les PersistenceMapperClient sur elle. Definissez la propriete url “tcp://localhost:8000/TestServer1” – puisque nous aurons le serveur le client s'executant sur notre machine locale avant le deploiement.


Enregistrez le projet et de le fermer ou de le laisser ouvert si vous voulez avoir le client et le serveur dans un groupe de projet. Car il ne fonctionnera pas tant que nous avons notre serveur developpes et en cours d'execution parce que le socket de la peristencemapperclient tente de se connecter a ne pas etre enregistre.

[serveur]

Creer un ECO winform projet. Je l'ai appele il WorkTimeServer.
Ajoutez le temps de travail des classes, et de la persistance de mappeur de fournisseur de:

Ajout de l

Dans notre exemple, nous utilisons des bases de donnees Interbase avec la BDP. Alors deposez un PersistenceMapperBdp et un BdpConnection composant sur le PersistanceMapperProvider ECOSpace. Configurer le PersistenceMapperBDP pour Interbase et configurer la connexion de la BDPConnection en fonction de votre environnement local. Il vous suffit de configurer une base de donnees vide. Les tables seront creees plus tard par la persistance de mappeur de fournisseur.
Aller a l'ecospace (pas le persistencemapperprovider mais l'un est connecte a la winform) et selectionnez le temps de travail d'un package a partir de la liste des packages disponibles:

Ajouter le temps de travail calsses
Compiler le projet et de choisir le EcoSpaceType a etre utilise pour la persistance de mappeur de fournisseur. (Cliquez sur la surface de la persistance de mappeur de fournisseur et de le selectionner dans la liste deroulante dans l'inspecteur d'objet).
Vous pouvez maintenant cliquer sur creer le Schema bouton au bas de la EcoPersistanceMapper Fournisseur. Le resultat devrait ressembler a ceci:

ECO createt DB Cartographie
Vous avez maintenant commenter le code pour l'acces distant dans la persistance de mappeur de fournisseur. N'oubliez pas de decommenter la declaration de la procedure et a ajouter la mise en œuvre utilise-comme enonce dans les commentaires.

// Exemple de code pour enregistrer le fournisseur en tant que serveur a l'aide de
// binaire de mise en forme sur un canal TCP.
// ajouter les elements suivants a votre niveau de mise en œuvre utilise-declaration de decommenter le code
// System.Moment de l'execution.La serialisation.Formateurs, Systeme.Moment de l'execution.Acces A Distance Au Systeme.Moment de l'execution.L'acces distant.Canaux, Systeme.Moment de l'execution.L'acces distant.Les canaux.Tcp classe de procedure TEcoPersistenceMapperProvider.RegisterTcpServer(Port: entier)
var
fournisseur de: BinaryServerFormatterSinkProvider
accessoires: IDictionary
chan: TcpChannel
begin
fournisseur := BinaryServerFormatterSinkProvider.Creer
fournisseur.TypeFilterLevel := TypeFilterLevel.Complet // Necessaire pour serializations
accessoires := table de hachage.Creer
accessoires['port'] := Port
chan := TcpChannel.Creer(accessoires, neant, fournisseur)
ChannelServices.RegisterChannel(chan)
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(TEcoPersistenceMapperProvider),
'TestServer1',
WellKnownObjectMode.Singleton)
fin

Pour terminer la configuration de la Persistance de Mappeur de Fournisseur de definir l'attribut SyncActive de vrai. Vous pouvez egalement augmenter la valeur des attributs MaxOpenConnections et MaxPoolConnections si vous avez beaucoup de clients se connectant au serveur.
Maintenant, ajoutez un PersistanceMapperClient a l'Ecospace. Definissez la propriete url de tcp://localhost:8000/TestServer1 ou si vous avez change le RegisterTCPServer procedure pour les valeurs que vous avez fournis.
Nous avons d'appeler le RegisterTCPServer composant avant de le PersistenceMapperClient est initialise. Pour ce faire modifier le constructeur de la EcoSpace comme suit:

constructeur TWorkTimeServerEcoSpace.Creer
begin
herite de Creer
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer(8000)
InitializeComponent
// TODO: Ajouter de tout constructeur code ici
fin

Le serveur de la partie est d'ores et deja pleinement fonctionnel. Pour ajouter un aperçu des donnees fournies par nos clients, nous avons creer le frontend:
Serveur Frontend
Dans le timer tick evenement vous code le Service de Persistance de code deja connu de la part du client:

procedure TWinForm.Timer1_Tick(sender: Systeme.Objet e: Systeme.EventArgs)
var
c: IChange
begin
EcoSpace.PersistenceService.RetrieveChanges
pour c dans EcoSpace.PersistenceService.GetChanges ne
si c.IsDirectConflict alors c.Action := ChangeActionKind.Jeter le reste
c.Action := ChangeActionKind.Garder
EcoSpace.PersistenceService.ApplyAllChanges
fin

Reglez la minuterie propriete enabled a true. Enregistrer et demarrer le projet et de le detacher de Delphi.

Detacher programme de Delphes

Ouvrir le projet du client, de nouveau. Demarrer le projet du client, de le detacher et de commencer un deuxieme client. Changer le nom d'utilisateur dans le deuxieme client et de l'experience. Il doit etre au travail et il est tres facile une fois atteint - ECO peut vous faire vraiment plaisir.
s'il vous Plaît laissez-moi savoir si j'ai rate quelques etapes importantes pour la comprehension de comment le faire ou si j'ai fait quelque chose de pas la meilleure pratique comme. Je vais modifier l'article en fonction de vos commentaires.

  1. Le samplecode le serveur et le client peut etre trouve ici.

& nbsp

Un multi-client-eco exemple d'application.

Un multi-client-eco exemple d'application. : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation