RemObjects Software RemObjects Software

iPhone Goodies

iPhone Goodies Commit Details

Date:2009-07-21 19:44:14 (3 years 9 months ago)
Author:marc hoffman
Commit:10
Parents: 9
Message:- "LastSeen" dateTime field in DeviceInfo - Don't cache connection for now (we need to properly detect connection loss, eventually; this is a workaround)

File differences

RemObjects.SDK.ApplePushProvider/APSConnect.pas
4545constructor APSConnect(aCertificateName: String);
4646begin
4747  fCertificate := FindCertificate(aCertificateName);
48  CreateStream;
48  //CreateStream;
4949end;
5050
5151constructor APSConnect(aCertificate: X509Certificate);
5252begin
5353  fCertificate := aCertificate;
54  CreateStream;
54  //CreateStream;
5555end;
5656
5757method APSConnect.CreateStream;
...... 
114114      w.Write([Byte(data.Length and $ff00 div $100), Byte(data.Length and $ff)]);
115115      w.Write(data);
116116      w.Flush;
117      //todo: handle connetion loss & reconnecting
118
119      fSslStream.Write(m.ToArray);
120      fSslStream.Flush;
117      
118      //todo: this is temp; we need to cache the connection but also proeprly recover from loss
119      CreateStream;
120      try
121        fSslStream.Write(m.ToArray);
122        fSslStream.Flush;
123      finally
124        fSslStream.Dispose();
125        fTcpClient.Close();
126        fSslStream := nil;
127        fTcpClient := nil;
128      end;
121129      //Debug: StreamHelpers.SaveStreamToFile(m, 'w:\test.data');
122130    end;
123131  end;
RemObjects.SDK.ApplePushProvider/ApplePushProviderService_Impl.pas
5252  var lStringToken := PushDeviceManager.BinaryToString(deviceToken);
5353  if PushDeviceManager.Devices.ContainsKey(lStringToken) then begin
5454    var p := PushDeviceManager.Devices[lStringToken];
55    if additionalInfo <> p.ClientInfo then begin
56      p.ClientInfo := additionalInfo;
57      PushDeviceManager.Flush;
58    end;
55    p.ClientInfo := additionalInfo;
56    p.LastSeen := DateTime.Now;
57    PushDeviceManager.Flush;
5958  end
6059  else begin
6160    var p := new PushDeviceInfo(Token := deviceToken,
62                                UserReference := iif(HasSession, Session['UserID'].ToString, nil),
61                                UserReference := iif(HasSession, Session['UserID']:ToString, nil),
6362                                ClientInfo := additionalInfo,
64                                ServerInfo := nil);
63                                ServerInfo := nil,
64                                LastSeen := DateTime.Now);
6565    PushDeviceManager.Devices.Add(lStringToken, p);
6666    PushDeviceManager.Flush;
6767  end;
RemObjects.SDK.ApplePushProvider/RemObjects.SDK.ApplePushProvider.oxygene
8787  <ItemGroup>
8888    <Compile Include="ApplePushProviderService_Impl.pas">
8989      <SubType>Component</SubType>
90      <DesignableClassName>RemObjects.SDK.PushProvider.ApplePushProviderService</DesignableClassName>
90      <DesignableClassName>RemObjects.SDK.ApplePushProvider.ApplePushProviderService</DesignableClassName>
9191      <DisableDesigner>True</DisableDesigner>
9292    </Compile>
9393    <Compile Include="APSConnect.pas">
...... 
104104    <Compile Include="PushDeviceManager.pas">
105105    </Compile>
106106    <Compile Include="PushProvider_Intf.pas">
107      <SubType>Code</SubType>
108107    </Compile>
109108    <Compile Include="PushProvider_Invk.pas">
110      <SubType>Code</SubType>
111109    </Compile>
112110  </ItemGroup>
113111  <ItemGroup>
RemObjects.SDK.ApplePushProvider/PushDeviceManager.pas
2121    property UserReference: String;
2222    property ClientInfo: String;
2323    property ServerInfo: String;
24    property LastSeen: DateTime;
2425  end;
2526
2627  PushDeviceManager = public static class
...... 
3536    method Save;
3637    constructor;
3738  assembly
38    method Flush;
3939  public
4040    property Devices: Dictionary<String, PushDeviceInfo> read fDevices;
4141    property APSConnect: APSConnect read fAPSConnect;
...... 
5656    method StringToBinary(aString: String): Binary;
5757    method BinaryToString(aBinary: Binary): String;
5858
59    method Flush;
5960  end;
6061
6162implementation
...... 
118119    lDeviceNode.Add(new XAttribute('Token', k));
119120    lDeviceNode.Add(new XElement('User',lInfo.UserReference));
120121    lDeviceNode.Add(new XElement('ClientInfo',lInfo.ClientInfo));
121    lDeviceNode.Add(new XElement('ServerInfo',lInfo.UserReference));
122    lDeviceNode.Add(new XElement('ServerInfo',lInfo.ServerInfo));
123    lDeviceNode.Add(new XElement('Date',lInfo.LastSeen.ToString('yyyy-MM-dd HH:mm:ss')));
124    
122125
123126    lRoot.Add(lDeviceNode);
124127  end;
...... 
136139    for each matching lDeviceNode: XElement in x.Root.Elements do begin
137140      var lToken := lDeviceNode.Attribute('Token').value;
138141
142      var lDate := DateTime.Now;
143      DateTime.TryParse(lDeviceNode.Element('Date'):Value, CultureInfo.InvariantCulture, DateTimeStyles.None, out lDate);
144
139145      var p := new PushDeviceInfo(Token := StringToBinary(lToken),
140146                                  UserReference := lDeviceNode.Element('User').Value,
141147                                  ClientInfo := lDeviceNode.Element('ClientInfo').Value,
142                                  ServerInfo := lDeviceNode.Element('ServerInfo').Value);
148                                  ServerInfo := lDeviceNode.Element('ServerInfo').Value,
149                                  LastSeen := lDate
150                                  );
143151      fDevices.Add(lToken, p);
144152      //if assigned(fAPSConnect) then fAPSConnect.PushMessageNotification(lToken.ToArray, 'Welcome back. Server has been Started.');
145153    end;

Archive Download the corresponding diff file

Revision: 10