Multi-cliente-eco ejemplo de aplicación.

Multi-cliente-eco ejemplo de aplicación.


La aplicación que se va a construir puede ser utilizado para capturar el tiempo de trabajo y descansos durante el tiempo de trabajo. El tiempo de trabajo puede ser capturado con varios clientes y el servidor de aplicaciones proporciona una vista de todos los datos capturados.
[nombre de La parte del cliente]

empezar con la configuración de un winform eco de la aplicación. Esta solicitud deberá ser el cliente. Lo he denominado WorkTimeClient.
Usted necesita tener el UML de Clases en un paquete, así que usted puede agregar más tarde en el servidor de la aplicación.
Nuevo Archivo de ECO de Paquetes UML
Crear el siguiente modelo:

el tiempo de trabajo Modelo

el tiempo de trabajo y breaktime están especializados en clases de un periodo de tiempo. Un tiempo de trabajo puede tener varios breaktimes.
La operación calcTotal da vuelta el lapso de tiempo de un tiempo de trabajo reducido por el acumulado de los timespans de la breaktimes. El resultado de calctotal se establece en el diff atributo del tiempo de trabajo de la clase. Asegúrese de alterar las clases de acuerdo a los siguientes fragmentos de código:

la función timestartend.calcTotal(): intervalo de tiempo
begin
Resultado := intervalo de tiempo(Auto.hora de finalización.starttime)
fin
la función de tiempo de trabajo.calcTotal(): intervalo de tiempo
var
ib: IbreaktimeList
i: Integer
begin
ib := get_breaktime
for i := 0 ib.Count-1 do begin
Auto.diff := Auto.diff - ib.Elemento[i].calcTotal
fin
end function breaktime.get_diff: intervalo de tiempo
begin
// Si desea agregar el código de usuario aquí, por favor, retire la [EcoAutoMaintained] atributo
// a partir de la declaración de propiedad en la sección de interfaz
Resultado := intervalo de tiempo(Auto._endtime-Auto._starttime)
final de la función de tiempo de trabajo.get_diff: intervalo de tiempo
begin
// Si desea agregar el código de usuario aquí, por favor, retire la [EcoAutoMaintained] atributo
// a partir de la declaración de propiedad en la sección de interfaz
Resultado := intervalo de tiempo(Auto._endtime - Auto._starttime)
fin

compilar la aplicación, vaya a la ecospace diseñador y agregar el paquete a la ecospace. Poner un PersistenceMapperXml componente en el ecospace por lo que puede desarrollar el cliente sin necesidad de que el servidor de la parte hasta ahora. Establecer el nombre de archivo de la persistencemapper a data.xml o lo que sea suites bien.
Cambiar ahora a la winform y crear una interfaz similar a esto:WorkTimeClient Frontend
Agregar expresión de dos asas y Administrador de Moneda Asas para el control datagrid.
con el fin De tener la última fila del datagrid seleccionado, coloque el código siguiente en el datagrids evento Paint:

procedimiento TWinForm.DataGrid1_Paint(sender: Sistema.Objeto e: Sistema.Windows.Los formularios.PaintEventArgs)
begin
DataGrid1.BindingContext[dataGrid1.Origen de datos,
dataGrid1.DataMember].Posición := ehWorkTime.GetList.Cuenta
cmhWorktime.Posición := ehWorkTime.GetList.Cuenta
fin

probablemente podría ser más inteligente lugares para poner esto pero yo no los conozco -)
Pero por favor, hágamelo saber en caso de que usted sabe.
Para el cliente de prueba de la aplicación puede simplemente asignar a la Actualización de la Base de datos EcoAction a la Actualización de DB Botón, mientras que en el Multi configuración del Cliente necesita el siguiente código:

var
c: IChange
begin
EcoSpace.PersistenceService.RetrieveChanges
c en EcoSpace.PersistenceService.GetChanges hacer
si c.IsDirectConflict luego c.Acción := ChangeActionKind.Deseche los demás
c.Acción := ChangeActionKind.Mantener
EcoSpace.PersistenceService.ApplyAllChanges
fin

Este código recupera a través de la EcoSpace servicio de persistencia de todos los cambios persistieron. En un multi entorno de cliente suceder que alguien ha cambiado los datos que ya había estado cambiando en su local de ecospace caché. El servicio de persistencia le da la capacidad de manejar que surjan conflictos, si ese es el caso. Yo nuestro caso (inicio de sesión tiempo de trabajo) no debería suceder.
sin Embargo, después de recuperarse de los cambios que usted camina a través de ... en bucle encima de ellos para comprobar si usted tiene un conflicto o no. Usted tiene que fijar para cada IChange interfaz en la GetChanges-lista de la acción, para ser utilizado cuando el ApplyAllChanges procedimiento se llama.
Si has terminado el cliente de esta manera la única cosa a la izquierda para habilitar para cliente servidor es cambiar el persistencemapper. Necesitamos un PersistenceMapperClient componente en nuestro ECOSpace ya que este no es el ECO Componet Paleta por defecto. Hemos de añadir la siguiente manera:

  • haga clic derecho en la Paleta de herramientas y seleccione 'Instalado .Componentes NET' desde el menú emergente.

la Adición de la peristence asignador de cliente
a Continuación, arrástrelo a la eco de la categoría.
Eliminar el PersistenceMapperXML cliente de la ecospace y la caída de la PersistenceMapperClient. Establecer la dirección url de propiedad 'tcp://localhost:8000/TestServer1' – ya tendremos el servidor y el cliente que se ejecuta en nuestro local de la máquina antes de la implementación.


Guarde el proyecto y cerrarla o dejarla abierta si usted quiere tener de cliente y servidor en un proyecto de grupo. Ya que no va a funcionar tan largo como tenemos nuestro servidor desarrollado y en funcionamiento, porque el zócalo de la peristencemapperclient intenta conectarse a no ser registrado.

[nombre de La parte del servidor]

Crear un nuevo ECO winform proyecto. Lo he denominado WorkTimeServer.
Añadir el tiempo de trabajo clases del paquete y de la persistencia de asignador de proveedor de:

la Adición de la ECO persistencia de asignador de proveedor

En nuestro ejemplo usamos Interbase con la BDP. Así que dejar a un PersistenceMapperBdp y un BdpConnection componente en el PersistanceMapperProvider ECOSpace. Configurar el PersistenceMapperBDP para Interbase y configurar la conexión de la BDPConnection de acuerdo a su medio ambiente local. Sólo tienes que configurar una base de datos vacía. Las tablas se crearán más tarde a través de la persistencia de asignador de proveedor.
Ir a la ecospace (no la persistencemapperprovider pero la que está conectada a la winform) y seleccione el paquete de tiempo de trabajo de los paquetes disponibles de la lista:

Añadir al tiempo de trabajo calsses
Compilar el proyecto y elija la EcoSpaceType a ser utilizados para la persistencia de asignador de proveedor. (Haga clic en la superficie de la persistencia de asignador de proveedor y seleccione de la lista desplegable en el inspector de objetos).
ahora puede hacer clic en Generar el Esquema de botón en la parte inferior de la EcoPersistanceMapper Proveedor. El resultado debería verse de la siguiente manera:

ECO createt DB Mapping
ahora tienes Que descomentar el código para la comunicación remota en la persistencia de asignador de proveedor. No se olvide de comentar la declaración del procedimiento y para añadir la aplicación utiliza-declaración como se indica en los comentarios.

// Ejemplo de código para registrar el proveedor de servidor de uso
// binario de formato en un canal TCP.
// añadir el siguiente a su nivel de aplicación se utiliza la instrucción cuando descomentar el código
// System.En tiempo de ejecución.La serialización.Los Formateadores De Sistema.En tiempo de ejecución.La Comunicación Remota, Sistema.En tiempo de ejecución.La comunicación remota.Canales, Sistema.En tiempo de ejecución.La comunicación remota.Los canales.Tcp clase de procedimiento TEcoPersistenceMapperProvider.RegisterTcpServer(Puerto: integer)
var
proveedor de: BinaryServerFormatterSinkProvider
accesorios: en IDictionary
chan: TcpChannel
begin
proveedor de := BinaryServerFormatterSinkProvider.Crear
proveedor.TypeFilterLevel := TypeFilterLevel.Completo // Necesario para serializations
accesorios := Hashtable.Crear
props['port'] := Puerto
chan := TcpChannel.Crear(props, nil, proveedor)
ChannelServices.RegisterChannel(chan)
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(TEcoPersistenceMapperProvider),
'TestServer1',
WellKnownObjectMode.Singleton)
fin

Para finalizar la configuración de la Persistencia de Asignador de Proveedor de establecer el atributo SyncActive a la verdad. Usted también puede aumentar el valor de los atributos MaxOpenConnections y MaxPoolConnections si usted tiene un montón de clientes que se conecten al servidor.
Ahora, agregue una PersistanceMapperClient a la Ecospace. Establecer la dirección url de la propiedad tcp://localhost:8000/TestServer1 o si ha cambiado el RegisterTCPServer procedimiento para los valores suministrados.
Tenemos que llamar a la RegisterTCPServer componente antes de la PersistenceMapperClient se inicializa. Para hacerlo, cambie el constructor de la EcoSpace de la siguiente manera:

constructor TWorkTimeServerEcoSpace.Crear
begin
heredado Crear
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer(8000)
InitializeComponent
// TODO: Agregar cualquier código constructor aquí
fin

La parte del servidor es ahora ya es totalmente funcional. Para agregar un poco de perspicacia en los datos entregados por nuestros trabajadores, clientes, creamos la siguiente interfaz:
Server
En el temporizador de intervalo caso de que el código de la Persistencia código de Servicio ya conocido desde el cliente:

procedimiento TWinForm.Timer1_Tick(sender: Sistema.Objeto e: Sistema.EventArgs)
var
c: IChange
begin
EcoSpace.PersistenceService.RetrieveChanges
c en EcoSpace.PersistenceService.GetChanges hacer
si c.IsDirectConflict luego c.Acción := ChangeActionKind.Deseche los demás
c.Acción := ChangeActionKind.Mantener
EcoSpace.PersistenceService.ApplyAllChanges
fin

Establecer el temporizador de propiedad enabled a true. Guardar e iniciar el proyecto y los separe de Delphi.

Separar programa de Delphi

Abra el proyecto de cliente nuevo. Iniciar el proyecto del cliente, separar y comenzar un segundo cliente. Cambiar el nombre de Usuario en el segundo cliente y el experimento. Debe estar funcionando y es muy fácil una vez que se logra - ECO puede hacer muy feliz.
por Favor, hágamelo saber si me he perdido algunos pasos importantes para la comprensión de cómo hacerlo o si hice algo que no mejor práctica. Voy a cambiar el artículo, a continuación, de acuerdo a sus comentarios.

  1. El samplecode de el servidor y el cliente se puede encontrar aquí.

& nbsp







Multi-cliente-eco ejemplo de aplicacion.


Multi-cliente-eco ejemplo de aplicacion. : Multi-millones de consejos para hacer su vida mas facil.


La aplicacion que se va a construir puede ser utilizado para capturar el tiempo de trabajo y descansos durante el tiempo de trabajo. El tiempo de trabajo puede ser capturado con varios clientes y el servidor de aplicaciones proporciona una vista de todos los datos capturados.
[nombre de La parte del cliente]

empezar con la configuracion de un winform eco de la aplicacion. Esta solicitud debera ser el cliente. Lo he denominado WorkTimeClient.
Usted necesita tener el UML de Clases en un paquete, asi que usted puede agregar mas tarde en el servidor de la aplicacion.
Nuevo Archivo de ECO de Paquetes UML
Crear el siguiente modelo:

el tiempo de trabajo Modelo

el tiempo de trabajo y breaktime estan especializados en clases de un periodo de tiempo. Un tiempo de trabajo puede tener varios breaktimes.
La operacion calcTotal da vuelta el lapso de tiempo de un tiempo de trabajo reducido por el acumulado de los timespans de la breaktimes. El resultado de calctotal se establece en el diff atributo del tiempo de trabajo de la clase. Asegurese de alterar las clases de acuerdo a los siguientes fragmentos de codigo:

la funcion timestartend.calcTotal(): intervalo de tiempo
begin
Resultado := intervalo de tiempo(Auto.hora de finalizacion.starttime)
fin
la funcion de tiempo de trabajo.calcTotal(): intervalo de tiempo
var
ib: IbreaktimeList
i: Integer
begin
ib := get_breaktime
for i := 0 ib.Count-1 do begin
Auto.diff := Auto.diff - ib.Elemento[i].calcTotal
fin
end function breaktime.get_diff: intervalo de tiempo
begin
// Si desea agregar el codigo de usuario aqui, por favor, retire la [EcoAutoMaintained] atributo
// a partir de la declaracion de propiedad en la seccion de interfaz
Resultado := intervalo de tiempo(Auto._endtime-Auto._starttime)
final de la funcion de tiempo de trabajo.get_diff: intervalo de tiempo
begin
// Si desea agregar el codigo de usuario aqui, por favor, retire la [EcoAutoMaintained] atributo
// a partir de la declaracion de propiedad en la seccion de interfaz
Resultado := intervalo de tiempo(Auto._endtime - Auto._starttime)
fin

compilar la aplicacion, vaya a la ecospace diseñador y agregar el paquete a la ecospace. Poner un PersistenceMapperXml componente en el ecospace por lo que puede desarrollar el cliente sin necesidad de que el servidor de la parte hasta ahora. Establecer el nombre de archivo de la persistencemapper a data.xml o lo que sea suites bien.
Cambiar ahora a la winform y crear una interfaz similar a esto:WorkTimeClient Frontend
Agregar expresion de dos asas y Administrador de Moneda Asas para el control datagrid.
con el fin De tener la ultima fila del datagrid seleccionado, coloque el codigo siguiente en el datagrids evento Paint:

procedimiento TWinForm.DataGrid1_Paint(sender: Sistema.Objeto e: Sistema.Windows.Los formularios.PaintEventArgs)
begin
DataGrid1.BindingContext[dataGrid1.Origen de datos,
dataGrid1.DataMember].Posicion := ehWorkTime.GetList.Cuenta
cmhWorktime.Posicion := ehWorkTime.GetList.Cuenta
fin

probablemente podria ser mas inteligente lugares para poner esto pero yo no los conozco -)
Pero por favor, hagamelo saber en caso de que usted sabe.
Para el cliente de prueba de la aplicacion puede simplemente asignar a la Actualizacion de la Base de datos EcoAction a la Actualizacion de DB Boton, mientras que en el Multi configuracion del Cliente necesita el siguiente codigo:

var
c: IChange
begin
EcoSpace.PersistenceService.RetrieveChanges
c en EcoSpace.PersistenceService.GetChanges hacer
si c.IsDirectConflict luego c.Accion := ChangeActionKind.Deseche los demas
c.Accion := ChangeActionKind.Mantener
EcoSpace.PersistenceService.ApplyAllChanges
fin

Este codigo recupera a traves de la EcoSpace servicio de persistencia de todos los cambios persistieron. En un multi entorno de cliente suceder que alguien ha cambiado los datos que ya habia estado cambiando en su local de ecospace cache. El servicio de persistencia le da la capacidad de manejar que surjan conflictos, si ese es el caso. Yo nuestro caso (inicio de sesion tiempo de trabajo) no deberia suceder.
sin Embargo, despues de recuperarse de los cambios que usted camina a traves de ... en bucle encima de ellos para comprobar si usted tiene un conflicto o no. Usted tiene que fijar para cada IChange interfaz en la GetChanges-lista de la accion, para ser utilizado cuando el ApplyAllChanges procedimiento se llama.
Si has terminado el cliente de esta manera la unica cosa a la izquierda para habilitar para cliente servidor es cambiar el persistencemapper. Necesitamos un PersistenceMapperClient componente en nuestro ECOSpace ya que este no es el ECO Componet Paleta por defecto. Hemos de añadir la siguiente manera:

  • haga clic derecho en la Paleta de herramientas y seleccione 'Instalado .Componentes NET' desde el menu emergente.

la Adicion de la peristence asignador de cliente
a Continuacion, arrastrelo a la eco de la categoria.
Eliminar el PersistenceMapperXML cliente de la ecospace y la caida de la PersistenceMapperClient. Establecer la direccion url de propiedad 'tcp://localhost:8000/TestServer1' – ya tendremos el servidor y el cliente que se ejecuta en nuestro local de la maquina antes de la implementacion.


Guarde el proyecto y cerrarla o dejarla abierta si usted quiere tener de cliente y servidor en un proyecto de grupo. Ya que no va a funcionar tan largo como tenemos nuestro servidor desarrollado y en funcionamiento, porque el zocalo de la peristencemapperclient intenta conectarse a no ser registrado.

[nombre de La parte del servidor]

Crear un nuevo ECO winform proyecto. Lo he denominado WorkTimeServer.
Añadir el tiempo de trabajo clases del paquete y de la persistencia de asignador de proveedor de:

la Adicion de la ECO persistencia de asignador de proveedor

En nuestro ejemplo usamos Interbase con la BDP. Asi que dejar a un PersistenceMapperBdp y un BdpConnection componente en el PersistanceMapperProvider ECOSpace. Configurar el PersistenceMapperBDP para Interbase y configurar la conexion de la BDPConnection de acuerdo a su medio ambiente local. Solo tienes que configurar una base de datos vacia. Las tablas se crearan mas tarde a traves de la persistencia de asignador de proveedor.
Ir a la ecospace (no la persistencemapperprovider pero la que esta conectada a la winform) y seleccione el paquete de tiempo de trabajo de los paquetes disponibles de la lista:

Añadir al tiempo de trabajo calsses
Compilar el proyecto y elija la EcoSpaceType a ser utilizados para la persistencia de asignador de proveedor. (Haga clic en la superficie de la persistencia de asignador de proveedor y seleccione de la lista desplegable en el inspector de objetos).
ahora puede hacer clic en Generar el Esquema de boton en la parte inferior de la EcoPersistanceMapper Proveedor. El resultado deberia verse de la siguiente manera:

ECO createt DB Mapping
ahora tienes Que descomentar el codigo para la comunicacion remota en la persistencia de asignador de proveedor. No se olvide de comentar la declaracion del procedimiento y para añadir la aplicacion utiliza-declaracion como se indica en los comentarios.

// Ejemplo de codigo para registrar el proveedor de servidor de uso
// binario de formato en un canal TCP.
// añadir el siguiente a su nivel de aplicacion se utiliza la instruccion cuando descomentar el codigo
// System.En tiempo de ejecucion.La serializacion.Los Formateadores De Sistema.En tiempo de ejecucion.La Comunicacion Remota, Sistema.En tiempo de ejecucion.La comunicacion remota.Canales, Sistema.En tiempo de ejecucion.La comunicacion remota.Los canales.Tcp clase de procedimiento TEcoPersistenceMapperProvider.RegisterTcpServer(Puerto: integer)
var
proveedor de: BinaryServerFormatterSinkProvider
accesorios: en IDictionary
chan: TcpChannel
begin
proveedor de := BinaryServerFormatterSinkProvider.Crear
proveedor.TypeFilterLevel := TypeFilterLevel.Completo // Necesario para serializations
accesorios := Hashtable.Crear
props['port'] := Puerto
chan := TcpChannel.Crear(props, nil, proveedor)
ChannelServices.RegisterChannel(chan)
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(TEcoPersistenceMapperProvider),
'TestServer1',
WellKnownObjectMode.Singleton)
fin

Para finalizar la configuracion de la Persistencia de Asignador de Proveedor de establecer el atributo SyncActive a la verdad. Usted tambien puede aumentar el valor de los atributos MaxOpenConnections y MaxPoolConnections si usted tiene un monton de clientes que se conecten al servidor.
Ahora, agregue una PersistanceMapperClient a la Ecospace. Establecer la direccion url de la propiedad tcp://localhost:8000/TestServer1 o si ha cambiado el RegisterTCPServer procedimiento para los valores suministrados.
Tenemos que llamar a la RegisterTCPServer componente antes de la PersistenceMapperClient se inicializa. Para hacerlo, cambie el constructor de la EcoSpace de la siguiente manera:

constructor TWorkTimeServerEcoSpace.Crear
begin
heredado Crear
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer(8000)
InitializeComponent
// TODO: Agregar cualquier codigo constructor aqui
fin

La parte del servidor es ahora ya es totalmente funcional. Para agregar un poco de perspicacia en los datos entregados por nuestros trabajadores, clientes, creamos la siguiente interfaz:
Server
En el temporizador de intervalo caso de que el codigo de la Persistencia codigo de Servicio ya conocido desde el cliente:

procedimiento TWinForm.Timer1_Tick(sender: Sistema.Objeto e: Sistema.EventArgs)
var
c: IChange
begin
EcoSpace.PersistenceService.RetrieveChanges
c en EcoSpace.PersistenceService.GetChanges hacer
si c.IsDirectConflict luego c.Accion := ChangeActionKind.Deseche los demas
c.Accion := ChangeActionKind.Mantener
EcoSpace.PersistenceService.ApplyAllChanges
fin

Establecer el temporizador de propiedad enabled a true. Guardar e iniciar el proyecto y los separe de Delphi.

Separar programa de Delphi

Abra el proyecto de cliente nuevo. Iniciar el proyecto del cliente, separar y comenzar un segundo cliente. Cambiar el nombre de Usuario en el segundo cliente y el experimento. Debe estar funcionando y es muy facil una vez que se logra - ECO puede hacer muy feliz.
por Favor, hagamelo saber si me he perdido algunos pasos importantes para la comprension de como hacerlo o si hice algo que no mejor practica. Voy a cambiar el articulo, a continuacion, de acuerdo a sus comentarios.

  1. El samplecode de el servidor y el cliente se puede encontrar aqui.

& nbsp

Multi-cliente-eco ejemplo de aplicación.

Multi-cliente-eco ejemplo de aplicación. : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación