Este documento presenta Multi-Todo, una herramienta de RemObjects que permite el desarrollo de aplicaciones web y móviles de manera multiplataforma, multilenguaje y multi-dispositivo. Multi-Todo proporciona un framework para crear servicios remotos que pueden ser accedidos desde distintos lenguajes de programación a través de diferentes protocolos, permitiendo el desarrollo de aplicaciones escalables de n-capas.
11. RemObjects Software
• Herramientas para desarrolladores
• Especializados en infraestructura
• Data Abstract : Bases de datos multi-nivel
• RemObjects SDK: Framework para hacer “remoting” (pero
por mucho la mejor implementacion existente!)
• Creadores de Delphi Prism & mas
• remobjects.com
13. Multi-Lenguaje *
Desarrollo servidor & clientes
.NET Delphi Prism Mono FreePascal
Ademas desarrollo clientes
Obj-C JavaScript PHP Python Ruby
* Se puede usar cualquier otro lenguaje para acceder a los servidores
14. Multi-Lenguaje *
Desarrollo servidor & clientes
.NET Delphi Prism Mono FreePascal
Ademas desarrollo clientes
Obj-C JavaScript PHP Python Ruby
* Se puede usar cualquier otro lenguaje para acceder a los servidores
25. Agrege BINARY
jo! Recuerda? Multi-todo
Cone
No elija entre estándar & lento o
propietario & rápido.
RO puede publicar el servidor simultaneamente en
multiples canales (TCP/HTTP, etc) y formatos (Bin,
XML SOAP, XML-RPC, JSON, etc)
28. App clientes como sea!
No reescriba todo cuando sale un nuevo dispositivo de moda
29. Como funciona (Servidor)
Con el “Service Builder” se define el servicio (funciones, métodos, etc)
http://wiki.remobjects.com/wiki/Service_Builder
30. Como funciona (Servidor)
Con el “Schema modeler” se define una BD virtual (abstracta) conectada a N-BD
http://wiki.remobjects.com/wiki/Schema_Modeler
31. Como funciona (Servidor)
Elija Transporte + formato (típicamente HTTP + BIN + (JSON o SOAP o XML-RPC))
var
ROMessage: TROBinMessage;
ROServer: TROIndyHTTPServer;
begin
Writeln('RemObjects SDK for Delphi - Command Line Server');
ROMessage := TROBinMessage.Create(TComponent(nil));
ROServer := TROIndyHTTPServer.Create(nil);
TROMessageDispatcher(ROServer.Dispatchers.Add).Message := ROMessage;
try
ROServer.Active := true;
WriteLn('Server is active, press Enter to stop.');
Readln;
finally
ROServer.Free;
ROMessage.Free;
end;
end.
32. Como funciona (Servidor)
Implementa los métodos, de forma similar a cualquier otro
uses
{Generated:} NewLibrary_Invk;
procedure Create_NewService(out anInstance : IUnknown);
begin
anInstance := TNewService.Create;
end;
{ NewService }
function TNewService.Sum(const A: Integer; const B: Integer): Integer;
begin
Result := a + b;
end;
function TNewService.GetServerTime: DateTime;
begin
result := Now;
end;
34. Relativity
Publica BD. Servidor N-Tier inmediato, sin codigo. Gratuito (con restricciones)
http://www.remobjects.com/da/relativity.aspx
35. Relativity
Publica BD. Servidor N-Tier inmediato, sin codigo. Gratuito (con restricciones)
http://www.remobjects.com/da/relativity.aspx
36. Como funciona (Cliente - Delphi/FPC)
Conectase al servidor, invoque los métodos
uses
NewLibrary_Intf;
{$R *.dfm}
function CallSum:integer;
var
myservice: INewService;
begin
myservice := CoNewService.Create(ROBINMessage1, ROWinInetHTTPChannel1);
result := myservice.Sum(1, 2);
end;
function GetDate:TDateTime;
var
myservice : INewService;
begin
myservice := CoNewService.Create(ROBINMessage1, ROWinInetHTTPChannel1);
res := myservice.GetServerTime;
result:= res;
end;
http://wiki.remobjects.com/wiki/How_to_Write_a_RemObjects_SDK_Client_(Delphi)
37. Como funciona (Cliente - Delphi/FPC)
Conectase al servidor, invoque los métodos
uses
NewLibrary_Intf;
{$R *.dfm}
function CallSum:integer;
var
myservice: INewService;
begin
myservice := CoNewService.Create(ROBINMessage1, ROWinInetHTTPChannel1);
result := myservice.Sum(1, 2);
end;
function GetDate:TDateTime;
var
myservice : INewService;
begin
myservice := CoNewService.Create(ROBINMessage1, ROWinInetHTTPChannel1);
res := myservice.GetServerTime;
result:= res;
end;
http://wiki.remobjects.com/wiki/How_to_Write_a_RemObjects_SDK_Client_(Delphi)
38. Como funciona (Cliente - XCode/iOS)
Conectase al servidor, invoque los métodos
//Conectarse
- (MyROService_Proxy *)getProxy
{
ROClientChannel *clientChannel = [ROHTTPClientChannel channelWithTargetUrl:
[serverCombo stringValue]];
ROMessage *message = [ROBinMessage message];
return [MyROService_Proxy proxyWithMessage:message channel:clientChannel];
}
//Invocar
- (IBAction) sum:(id)sender
{
int a = [aField intValue];
int b = [bField intValue];
int result = [[self getProxy] Sum:a:b];
[resultField setStringValue:[NSString stringWithFormat:@"%d", result]];
}
http://wiki.remobjects.com/wiki/
Writing_a_RemObjects_SDK_for_.NET_Server_and_Mac_Client_-
_Start_to_Finish_(Xcode_(Mac))
39. Como funciona (Cliente - XCode/iOS)
Conectase al servidor, invoque los métodos
//Conectarse
- (MyROService_Proxy *)getProxy
{
ROClientChannel *clientChannel = [ROHTTPClientChannel channelWithTargetUrl:
[serverCombo stringValue]];
ROMessage *message = [ROBinMessage message];
return [MyROService_Proxy proxyWithMessage:message channel:clientChannel];
}
//Invocar
- (IBAction) sum:(id)sender
{
int a = [aField intValue];
int b = [bField intValue];
int result = [[self getProxy] Sum:a:b];
[resultField setStringValue:[NSString stringWithFormat:@"%d", result]];
}
http://wiki.remobjects.com/wiki/
Writing_a_RemObjects_SDK_for_.NET_Server_and_Mac_Client_-
_Start_to_Finish_(Xcode_(Mac))
40. Como funciona (Cliente - NET/Mono)
Conectase al servidor, invoque los métodos
private void bSum_Click(object sender, System.EventArgs e)
{
// Creates a IROWindowsFormsServerService proxy
ROWindowsFormsServer.IROWindowsFormsServerService myService;
myService = ROWindowsFormsServer.CoROWindowsFormsServerService.Create(
message, clientChannel);
// Calls the Sum method
int myResult = myService.Sum(1,2);
// Displays the result
MessageBox.Show("The server returned "+myResult.ToString());
}
http://wiki.remobjects.com/wiki/How_to_Write_a_RemObjects_SDK_Client_(.NET)
41. Como funciona (Cliente - NET/Mono)
Conectase al servidor, invoque los métodos
private void bSum_Click(object sender, System.EventArgs e)
{
// Creates a IROWindowsFormsServerService proxy
ROWindowsFormsServer.IROWindowsFormsServerService myService;
myService = ROWindowsFormsServer.CoROWindowsFormsServerService.Create(
message, clientChannel);
// Calls the Sum method
int myResult = myService.Sum(1,2);
// Displays the result
MessageBox.Show("The server returned "+myResult.ToString());
}
http://wiki.remobjects.com/wiki/How_to_Write_a_RemObjects_SDK_Client_(.NET)
42. Como funciona (Cliente - JS/HTML)
Conectase al servidor, invoque los métodos
<html>
<head>
<script type="text/javascript" src="RemObjectsSDK.js"></script>
<script type="text/javascript" src="NewLibrary_intf.js"></script>
</head>
<body>
<h1>RemObjects SDK client</h1>
<a href="#" onclick="getTime();">Get time</a><br />
<textarea id="log" rows=10 cols=60></textarea>
<script type="text/javascript">
var channel = new RemObjects.SDK.HTTPClientChannel("http://" + window.location.host + "/
BIN"); //IE users use JSON
var message = new RemObjects.SDK.BinMessage();
var service = new NewService(channel, message);
function getTime() {
service.GetServerTime(function(result) {
document.getElementById("log").value += result + "n";
}, RemObjects.UTIL.showError);
}
</script>
</body>
</html>
http://wiki.remobjects.com/wiki/How_to_Write_a_RemObjects_SDK_Client_(JavaScript)
43. Como funciona (Cliente - JS/HTML)
Conectase al servidor, invoque los métodos
<html>
<head>
<script type="text/javascript" src="RemObjectsSDK.js"></script>
<script type="text/javascript" src="NewLibrary_intf.js"></script>
</head>
<body>
<h1>RemObjects SDK client</h1>
<a href="#" onclick="getTime();">Get time</a><br />
<textarea id="log" rows=10 cols=60></textarea>
<script type="text/javascript">
var channel = new RemObjects.SDK.HTTPClientChannel("http://" + window.location.host + "/
BIN"); //IE users use JSON
var message = new RemObjects.SDK.BinMessage();
var service = new NewService(channel, message);
function getTime() {
service.GetServerTime(function(result) {
document.getElementById("log").value += result + "n";
}, RemObjects.UTIL.showError);
}
</script>
</body>
</html>
http://wiki.remobjects.com/wiki/How_to_Write_a_RemObjects_SDK_Client_(JavaScript)
44. Baterías incluidas
Si lo imagina, ya lo tiene
Balanceo Cargas Seguridad Encriptacion
Failover Código Fuente Notificaciones
IIS Ejemplos servidor->cliente
CGI Bonjour Mas...
Compresión oData
45. Quiere saber mas?
Lista de Recursos
Descargue trial http://www.remobjects.com
Vídeos http://www.remobjects.com/tv/da.aspx
Documentación http://wiki.remobjects.com
Soporte/Foros http://connect.remobjects.com/