public void OnMessage(com.sybase.afx.json.JsonMessage msg) { string _notification = msg.GetHeaders().GetNullableString("SUPObjCmd"); bool _reregistered = (_notification != null && _notification.Equals("reregister")); if(_reregistered) { YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetCallbackHandler().OnSubscriptionEnd(); return; } string method = msg.GetHeaders().GetString("method"); bool _isAsync = "asyncReplayCompleted".Equals(method); string serverRemoteId = msg.GetHeaders().GetNullableString("remoteId"); string clientRemoteId = GetRemoteId(); if(serverRemoteId != null && clientRemoteId != null && !serverRemoteId.Equals(clientRemoteId)) { return; } bool _isTcn = "tcn".Equals(method); if(!_isAsync && !_isTcn) { return; } com.sybase.afx.json.JsonObject _content = (com.sybase.afx.json.JsonObject)(msg.GetContent()); string userContext = _content.GetString("userContext"); string synchronizationGroup = _content.GetString("synchronizationGroup"); Sybase.Persistence.SynchronizationContext syncContext = new Sybase.Persistence.SynchronizationContext(); syncContext.UserContext = userContext; Sybase.Collections.GenericList<Sybase.Persistence.ISynchronizationGroup> sgs = new Sybase.Collections.GenericList<Sybase.Persistence.ISynchronizationGroup>(); foreach(string sg in com.sybase.afx.util.StringUtil.GetCommaSeparatedList(synchronizationGroup)) { sgs.Add(YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetSynchronizationGroup(sg)); } if(_isTcn) { syncContext.Status = Sybase.Persistence.SynchronizationStatus.STARTING_ON_NOTIFICATION; } else { syncContext.Status = Sybase.Persistence.SynchronizationStatus.ASYNC_REPLAY_COMPLETED; } if(YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetCallbackHandler().OnSynchronize(sgs, syncContext) == Sybase.Persistence.SynchronizationAction.CANCEL) { return; } try { YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.BeginSynchronize(sgs, userContext); } catch(Sybase.Persistence.SynchronizeException ex) { syncContext.Exception = ex; syncContext.Status = Sybase.Persistence.SynchronizationStatus.ERROR; YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetCallbackHandler().OnSynchronize(sgs, syncContext); throw ex; } syncContext.Status = Sybase.Persistence.SynchronizationStatus.FINISHING; YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetCallbackHandler().OnSynchronize(sgs, syncContext); }
private static void InternalSynchronize (string synchronizationGroup, Sybase.Persistence.SyncStatusListener listener, Sybase.Persistence.SynchronizationContext syncContext, com.sybase.afx.json.JsonObject syncContextEx) { string mlServerHost; int mlServerPort; string syncUsername; string syncPassword; bool isInitialSync = "initialSync".Equals(synchronizationGroup) || KeyGenerator.InitSync(); YPF.Comercial.RRCC.SUP.PersonalizationParameters _pp = GetPersonalizationParameters(); _pp.Username =(GetSynchronizationProfile().UserName); _pp.Password =(GetSynchronizationProfile().Password); _pp.SaveUserNamePassword(); lock(_synchronizeLock) { Sybase.Mobile.Application.GetInstance().ApplicationSettings.CheckApplicationSettingsAvailable(); Sybase.Persistence.ConnectionProfile _interProfile = new Sybase.Persistence.ConnectionProfile(); _interProfile.DomainName =("default"); _interProfile.ServerName =("sdbuetmapl28"); _interProfile.PortNumber =(2480); _interProfile.NetworkProtocol =("http,https"); _interProfile.NetworkStreamParams =("trusted_certificates=;url_suffix="); _interProfile.ApplyProperties(Sybase.Mobile.Application.GetInstance().ApplicationSettings); _interProfile.ApplyProperties(GetSynchronizationProfile()); mlServerHost = _interProfile.ServerName; mlServerPort = _interProfile.PortNumber; syncUsername = _interProfile.UserName; syncPassword = _interProfile.Password; string sysPlatform = _interProfile.GetProperty("os"); Sybase.Persistence.ConnectionWrapper ulConn = null; com.sybase.afx.db.ConnectionSyncParams syncParms = new com.sybase.afx.db.ConnectionSyncParams(); try { YPF.Comercial.RRCC.SUP.PersonalizationParameters pp = new YPF.Comercial.RRCC.SUP.PersonalizationParameters(); syncUsername += ("@" + _interProfile.DomainName); com.sybase.afx.json.JsonObject json = new com.sybase.afx.json.JsonObject(); Sybase.Collections.GenericList<YPF.Comercial.RRCC.SUP.ClientPersonalization> listClientPersonalization = pp.ListClientPK; foreach(YPF.Comercial.RRCC.SUP.ClientPersonalization __item in listClientPersonalization) { json.Put(__item.Key_name, __item.GetRealValue()); } Sybase.Collections.GenericList<YPF.Comercial.RRCC.SUP.SessionPersonalization> sessionServerPersonalization = pp.ListSessionPK; foreach(YPF.Comercial.RRCC.SUP.SessionPersonalization __item in sessionServerPersonalization) { json.Put(__item.Key_name, __item.Value); } json.Put("pv", "" + YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetProtocolVersion()); json.Put("pid", com.sybase.afx.util.PidUtil.GetId()); json.Put("cle", _interProfile.GetProperty("changeLogEnabled", "false")); if(isInitialSync) { com.sybase.afx.json.JsonObject jsonMBOMap = new com.sybase.afx.json.JsonObject(); jsonMBOMap.Put("DireccionEntrega",231); jsonMBOMap.Put("Interaccion",232); jsonMBOMap.Put("CalendarioInteraccionLocal",233); jsonMBOMap.Put("CategoriaPregunta",234); jsonMBOMap.Put("ClienteCabeceraPedido",235); jsonMBOMap.Put("ClienteDetallePedido",236); jsonMBOMap.Put("ClienteDeuda",237); jsonMBOMap.Put("ClienteFacturacion",238); jsonMBOMap.Put("CustomLocalData",239); jsonMBOMap.Put("Direccion",240); jsonMBOMap.Put("EstadoInteraccion",241); jsonMBOMap.Put("Formulario",242); jsonMBOMap.Put("FormularioMercado",243); jsonMBOMap.Put("FormularioMercadoSegmento",244); jsonMBOMap.Put("FormularioMercadoSubsegmento",245); jsonMBOMap.Put("FormularioMercadoTamano",246); jsonMBOMap.Put("FormularioPrecios",247); jsonMBOMap.Put("FormularioPreciosMercado",248); jsonMBOMap.Put("FormularioPreciosRed",249); jsonMBOMap.Put("FormularioPreciosZonaInspeccion",250); jsonMBOMap.Put("FormularioTransporte",251); jsonMBOMap.Put("Mail",252); jsonMBOMap.Put("Motivo",253); jsonMBOMap.Put("Negocio",254); jsonMBOMap.Put("OpcionRespuesta",255); jsonMBOMap.Put("Parametro",256); jsonMBOMap.Put("Pregunta",257); jsonMBOMap.Put("PreguntaFormulario",258); jsonMBOMap.Put("Provincia",259); jsonMBOMap.Put("RelevamientoPrecios",260); jsonMBOMap.Put("RelevamientoPreciosProducto",261); jsonMBOMap.Put("RelevamientoProducto",262); jsonMBOMap.Put("RelevamientoProductoProducto",263); jsonMBOMap.Put("RelevamientoProductoTipo",264); jsonMBOMap.Put("RelevamientoProveedor",265); jsonMBOMap.Put("RelevamientoProveedorCanal",266); jsonMBOMap.Put("RelevamientoProveedorLogistica",267); jsonMBOMap.Put("RelevamientoTransporte",268); jsonMBOMap.Put("RelevamientoTransporteCompetidor",269); jsonMBOMap.Put("RelevamientoTransporteProducto",270); jsonMBOMap.Put("RepresentanteComercial",271); jsonMBOMap.Put("Respuesta",272); jsonMBOMap.Put("RespuestaInteraccionFormulario",273); jsonMBOMap.Put("Segmento",274); jsonMBOMap.Put("SeleccionFormulario",275); jsonMBOMap.Put("SeleccionTablaRelevamiento",276); jsonMBOMap.Put("TablaRelevamiento",277); jsonMBOMap.Put("Telefono",278); jsonMBOMap.Put("TipoInteraccion",279); jsonMBOMap.Put("LogRecordImpl",281); jsonMBOMap.Put("OperationReplay",282); jsonMBOMap.Put("SISSubscription",285); jsonMBOMap.Put("PackageProperties",286); jsonMBOMap.Put("ChangeLogImpl",288); jsonMBOMap.Put("OfflineAuthentication",289); jsonMBOMap.Put("RepresentanteComercialSynchronizationParameters",290); jsonMBOMap.Put("RepresentanteComercial_pull_pq",291); jsonMBOMap.Put("ClientPersonalization",341); jsonMBOMap.Put("KeyGenerator",346); jsonMBOMap.Put("LocalKeyGenerator",348); json.Put("mboMap", jsonMBOMap); json.Put("publications", synchronizationGroup); json.Put("isInitialSync", isInitialSync.ToString()); } else { json.Put("publications", synchronizationGroup); } bool async = !isInitialSync && _interProfile.GetBoolean("asyncReplay", true); if(syncContextEx == null) { syncContextEx = new com.sybase.afx.json.JsonObject(); } syncContextEx.Remove("async"); syncContextEx.Put("async", async + ""); json.Put("_as", async + ""); if(async && !IsReplayQueueEmpty()) { YPF.Comercial.RRCC.SUP.intrnl.OperationReplay rq = new YPF.Comercial.RRCC.SUP.intrnl.OperationReplay(); rq.SetComponent("CRMMobileDesaDB"); com.sybase.afx.json.JsonObject parameter = new com.sybase.afx.json.JsonObject(); if(syncContext != null) { object userContext = syncContext.UserContext; if(userContext != null) { if(userContext is string) { parameter.Put("userContext", userContext); } else { throw new Sybase.Persistence.PersistenceException("user context must be string for async operation replay"); } } parameter.Put("synchronizationGroup",synchronizationGroup); } rq.SetParameters(parameter.ToString()); rq.SetOperation("batchNotify"); rq.Save(); } if(_appName != null) { json.Put("app", _appName); } json.Put("appId", Sybase.Mobile.Application.GetInstance().ApplicationIdentifier); if (sysPlatform != null) { json.Put("os", sysPlatform); } string str = json.ToString(); byte[] bin = com.sybase.afx.util.StringUtil.ToUTF8(str); string authParam = com.sybase.afx.util.BinaryUtil.ToStringBase64(bin); bool isHttps = _interProfile.NetworkProtocol.Equals("https", System.StringComparison.OrdinalIgnoreCase); int maxLen = 4000; int size = (authParam.Length + maxLen - 1) / maxLen; if (size > 16) { throw new Sybase.Persistence.SynchronizeException("the whole length of personalization parameters exceeds the limit of authenticate parameters and the safe length is 512 bytes"); } string[] authList = new string[16]; for (int i = 0; i < size; i++) { authList[i] = authParam.Substring(i * maxLen, ((i + 1) * maxLen < authParam.Length) ? maxLen : (authParam.Length - i * maxLen)); } for (int i = size; i < 16; i++) { authList[i] = "x";//Spacer } ulConn = AcquireDBWriteConnection(); syncParms.IsHttps = isHttps; syncParms.Version = _interProfile.DomainName + "_" + "crmmobiledesa.1_0"; syncParms.UserName = syncUsername; if(_interProfile.Certificate != null) { syncPassword = null; } syncParms.Password = syncPassword + ("@" + com.sybase.afx.util.PidUtil.GetId()); string mlStreamParams = "host=\"" + mlServerHost + "\";port=\"" + mlServerPort + "\""; string urlSuffix = com.sybase.afx.util.NetworkStreamParams.ExtractValue("url_suffix", _interProfile.NetworkStreamParams); if(urlSuffix != null && urlSuffix.Length != 0) { mlStreamParams = "host=\"" + mlServerHost + "\";port=\"" + mlServerPort + "\";url_suffix=\"" + urlSuffix + "\""; } //setting http_userid and http_password if HTTPCredentials are available Sybase.Persistence.LoginCredentials lc = Sybase.Mobile.Application.GetInstance().ConnectionProperties.HTTPCredentials; if (lc != null) { string http_userid = lc.UserName; string http_password = lc.Password; mlStreamParams = mlStreamParams + ";http_userid=\"" + http_userid + "\";http_password=\"" + http_password + "\""; } string cookie = com.sybase.afx.util.NetworkStreamParams.ExtractValue("set_cookie", _interProfile.NetworkStreamParams); Sybase.Collections.StringProperties httpCookies = Sybase.Mobile.Application.GetInstance().ConnectionProperties.HttpCookies; if (httpCookies != null) { foreach(string key in httpCookies.Keys()) { string value = httpCookies.Item(key); if (cookie == null || cookie.Length == 0) { cookie = key + "=" + value; } else { cookie += "," + key + "=" + value; } } } if (cookie != null && cookie.Length != 0) { mlStreamParams = mlStreamParams + ";set_cookie=\"" + cookie +"\""; } System.Collections.Generic.List<string> headers = com.sybase.afx.util.NetworkStreamParams.ExtractListValue("custom_header", _interProfile.NetworkStreamParams); foreach (string header in headers) { mlStreamParams = mlStreamParams + ";custom_header=\"" + header +"\""; } Sybase.Collections.StringProperties httpHeaders = Sybase.Mobile.Application.GetInstance().ConnectionProperties.HttpHeaders; if (httpHeaders != null) { foreach(string key in httpHeaders.Keys()) { string value = httpHeaders.Item(key); mlStreamParams = mlStreamParams + ";custom_header=\"" + key + ":" + value + "\""; } } string ip = _interProfile.GetString("client_ip"); if(ip != null && ip.Length != 0) { mlStreamParams = mlStreamParams + ";client_ip_addr=\"" + ip + "\""; } if(isHttps) { string ts = com.sybase.afx.util.NetworkStreamParams.ExtractValue("trusted_certificates", _interProfile.NetworkStreamParams); mlStreamParams += ";trusted_certificates=\"" + ts + "\""; string tls = com.sybase.afx.util.NetworkStreamParams.ExtractValue("tls_type", _interProfile.NetworkStreamParams); if (tls != null) { mlStreamParams += ";tls_type=\"" + tls + "\""; } } System.Collections.Generic.IList<System.Collections.Generic.KeyValuePair<string, string>> nwParams = com.sybase.afx.util.NetworkStreamParams.Parse(_interProfile.NetworkStreamParams); foreach (System.Collections.Generic.KeyValuePair<string, string> entry in nwParams) { string v = entry.Key; if (!v.StartsWith("url_suffix") && !v.StartsWith("trusted_certificates") && !v.StartsWith("tls_type") && !v.StartsWith("http_userid") && !v.StartsWith("http_password") && !v.StartsWith("set_cookie") && !v.StartsWith("custom_header")) { mlStreamParams += ";" + v + "=\"" + entry.Value + "\""; } } syncParms.StreamParms = mlStreamParams; syncParms.Publications = synchronizationGroup; syncParms.AuthenticationParms = authList; syncParms.UploadOnly = syncContextEx.GetBoolean("uploadOnly"); com.sybase.afx.db.ConnectionUtil.SetConnectionSyncParams(ulConn, syncParms); com.sybase.afx.db.CommandUtil.TraceSynchronize(_profile.GetSyncProfile(), synchronizationGroup, syncContext, GetRemoteId(ulConn)); if (listener != null) { string[] mboNames = com.sybase.afx.DatabaseBase.GetMBONames(synchronizationGroup, GetPublications()); System.Collections.Hashtable tableMBOMap = getTableMBOMap(); com.sybase.afx.db.ConnectionUtil.Synchronize(ulConn, listener, _interProfile.ToSyncConnection(), mboNames, tableMBOMap); } else { com.sybase.afx.db.ConnectionUtil.Synchronize(ulConn); } //check protocol version PackageProperties _props = PackageProperties.Find("protocol_version"); int _pv = 0; if (_props != null) { _pv = System.Int32.Parse(_props.Value); } if (!isInitialSync && GetProtocolVersion() > _pv) { string _msg = "device's protocol version is incompatible with the server's protocol version. (" + GetProtocolVersion() + " > " + _pv + ")"; Sybase.Persistence.ProtocolException _pe = new Sybase.Persistence.ProtocolException(_msg); GetCallbackHandler().OnMessageException(_pe); throw _pe; } PackageProperties lastRequestId = PackageProperties.Find("lastRequestId"); if(lastRequestId == null) { lastRequestId = new PackageProperties(); lastRequestId.Key = "lastRequestId"; } try { lastRequestId.Value = KeyGenerator.GenerateId()+""; } catch(Sybase.Persistence.SynchronizeRequiredException) { lastRequestId = null; } if(lastRequestId != null) { lastRequestId.Save(); } YPF.Comercial.RRCC.SUP.intrnl.OperationReplay.Finish(); } catch(com.sybase.afx.db.SynchronizationException _ex) { string exMsg = _ex.ToString(); com.sybase.afx.db.ConnectionImpl connImpl = (com.sybase.afx.db.ConnectionImpl)ulConn; iAnywhere.Data.UltraLite.ULConnection ul_conn = (iAnywhere.Data.UltraLite.ULConnection)connImpl.GetConnection(); if (_ex.NativeError == com.sybase.afx.db.SynchronizationException.SQLE_MOBILINK_COMMUNICATIONS_ERROR) { string strMessage = ul_conn.SyncResult.StreamErrorParameters; try { int errorCode = System.Convert.ToInt32(strMessage); Sybase.Mobile.Application.GetInstance().ApplicationCallback.OnHttpCommunicationError(errorCode, "", new Sybase.Collections.StringProperties()); } catch (System.FormatException) { } } long authValue = ul_conn.SyncResult.AuthValue; if ((_ex.NativeError == com.sybase.afx.db.SynchronizationException.SQLE_MOBILINK_AUTHENTICATION_FAILED) && (authValue == com.sybase.afx.util.AuthExceptionUtil.FAILURE_CODE_TOKEN_VALIDATION_ERROR || authValue == 4000)) { GetCallbackHandler().OnLoginFailure(); if (syncContext == null) { syncContext = new Sybase.Persistence.SynchronizationContext(); } syncContext.ErrorCode = 401; syncContext.ErrorMessage = "authentication failed."; if (authValue == com.sybase.afx.util.AuthExceptionUtil.FAILURE_CODE_TOKEN_VALIDATION_ERROR) { syncContext.ErrorCode = 412; } } com.sybase.afx.util.AuthExceptionUtil.CheckAuthValueAfterSync(com.sybase.afx.db.ConnectionUtil.GetConnectionSyncAuthValue(ulConn), _ex); if (_ex.NativeError == com.sybase.afx.db.SynchronizationException.SQLE_MOBILINK_COMMUNICATIONS_ERROR) { exMsg += "Details:\n" + com.sybase.afx.db.ConnectionUtil.GetConnectionSyncDetail(ulConn) + "\n"; } if( !"system".Equals(synchronizationGroup) && com.sybase.afx.db.SynchronizationException.SQLE_SERVER_SYNCHRONIZATION_ERROR == _ex.NativeError ) { try { YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.Synchronize("system", null); } catch { if (!"initialSync".Equals(synchronizationGroup)) { string _msg = "the package is not deployed or device's protocol version may be incompatible with the server's protocol version. (" + GetProtocolVersion() + " > 0)"; Sybase.Persistence.ProtocolException _pe = new Sybase.Persistence.ProtocolException(_msg); GetCallbackHandler().OnMessageException(_pe); throw _pe; } } } throw new Sybase.Persistence.SynchronizeException(exMsg,_ex); } catch(System.Exception _ex) { throw new Sybase.Persistence.SynchronizeException(_ex.ToString(),_ex); } finally { if(ulConn != null) { ReleaseDBConnection();; } } } }
private static void SynchronizeWithCallback (string synchronizationGroups, object userContext, Sybase.Persistence.SyncStatusListener listener, com.sybase.afx.json.JsonObject syncContextEx) { Sybase.Persistence.SynchronizationContext syncContext = new Sybase.Persistence.SynchronizationContext(); syncContext.UserContext =(userContext); Sybase.Collections.GenericList<Sybase.Persistence.ISynchronizationGroup> sgs = new Sybase.Collections.GenericList<Sybase.Persistence.ISynchronizationGroup>(); foreach(string sg in com.sybase.afx.util.StringUtil.GetCommaSeparatedList(synchronizationGroups)) { sgs.Add(GetSynchronizationGroup(sg)); } syncContext.Status =(Sybase.Persistence.SynchronizationStatus.STARTING); Sybase.Persistence.SynchronizationAction _action = onSynchronizeCallback(sgs, syncContext); if(_action == Sybase.Persistence.SynchronizationAction.CANCEL) { return; } try { InternalSynchronize (synchronizationGroups, listener, syncContext, syncContextEx); } catch(Sybase.Persistence.SynchronizeException ex) { syncContext.Exception =(ex); syncContext.Status =(Sybase.Persistence.SynchronizationStatus.ERROR); onSynchronizeCallback(sgs, syncContext); throw ex; } catch(Sybase.Persistence.PersistenceException ex) { syncContext.Exception =(ex); syncContext.Status =(Sybase.Persistence.SynchronizationStatus.ERROR); onSynchronizeCallback(sgs, syncContext); throw ex; } if(GetSynchronizationProfile().AsyncReplay) { syncContext.Status =(Sybase.Persistence.SynchronizationStatus.ASYNC_REPLAY_UPLOADED); } else { syncContext.Status =(Sybase.Persistence.SynchronizationStatus.FINISHING); } onSynchronizeCallback(sgs, syncContext); }
public void Run() { Sybase.Persistence.SynchronizationContext syncContext = new Sybase.Persistence.SynchronizationContext(); Sybase.Collections.GenericList<Sybase.Persistence.ISynchronizationGroup> sgs; System.Exception syncException; bool failed; while (true) { // Block for entries in SRQ if (_SRQ.Peek()) { // This thread is the only entity the dequeue while all only enqueue // so there is no race condition regarding multiple dequeuers // Transfer SRQ to IMQ while (_SRQ.Size() != 0) { Sybase.Persistence.SynchronizationRequest request = _SRQ.Dequeue(); request.SyncReqStatus = Sybase.Persistence.SynchronizationRequest.ACTIVE; _IMQ.Enqueue(request); } // Clear set to build list of synchronization group syncSet.Clear(); contextSet.Clear(); syncMode = Sybase.Persistence.SynchronizationRequest.UPLOADONLYSYNC; // onSynchronization call back for each request in case application wishes to cancel foreach (Sybase.Persistence.SynchronizationRequest sr in _IMQ) { string userContext = (string)sr.Context; syncContext.UserContext = userContext; sgs = sr.SyncReqGroups; syncContext.Status = Sybase.Persistence.SynchronizationStatus.STARTING; // onSynchronize call back to validate sync requests Sybase.Persistence.SynchronizationAction action = onSynchronizeCallback(sgs, syncContext); if (action == Sybase.Persistence.SynchronizationAction.CANCEL) { // mark request canceled sr.SyncReqStatus = Sybase.Persistence.SynchronizationRequest.CANCELLED; } else { // Collect distinct sync groups for approved requests foreach (Sybase.Persistence.ISynchronizationGroup syncGroup in sr.SyncReqGroups) { if (!syncSet.Contains(syncGroup.Name)) { syncSet.Add(syncGroup.Name); } } if (sr.SyncReqMode == Sybase.Persistence.SynchronizationRequest.FULLSYNC) { syncMode = Sybase.Persistence.SynchronizationRequest.FULLSYNC; } if (userContext != null) { // the user context is always a string // Add non-duplicated context for this batch synchronization contextSet.Add(userContext); } } } try { failed = false; syncException = null; if (syncSet.Size() > 0) { string allGroups = com.sybase.afx.util.StringUtil.Join(syncSet, ","); // set up Synchronization context // status field should still be STARTING syncContext.Exception = null; string allUserContext = com.sybase.afx.util.StringUtil.Join(contextSet, ","); syncContext.UserContext = allUserContext; com.sybase.afx.json.JsonObject syncContextEx = new com.sybase.afx.json.JsonObject(); if (syncMode == Sybase.Persistence.SynchronizationRequest.UPLOADONLYSYNC) { syncContextEx.Put("uploadOnly", "true"); } else { syncContextEx.Put("uploadOnly", "false"); } InternalSynchronize(allGroups, new Sybase.Persistence.DefaultStatusListener(syncContext), syncContext, syncContextEx); } } catch (Sybase.Persistence.SynchronizeException ex) { failed = true; syncException = ex; } catch (System.Exception e) { failed = true; syncException = new Sybase.Persistence.SynchronizeException(e); } foreach (Sybase.Persistence.SynchronizationRequest sr in _IMQ) { if (sr.SyncReqStatus == Sybase.Persistence.SynchronizationRequest.CANCELLED) { continue; } syncContext.UserContext = sr.Context; sgs = sr.SyncReqGroups; if (failed) { syncContext.Status = Sybase.Persistence.SynchronizationStatus.ERROR; syncContext.Exception = syncException; } else { syncContext.Status = Sybase.Persistence.SynchronizationStatus.FINISHING; if(YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetSynchronizationProfile().AsyncReplay) { syncContext.Status = Sybase.Persistence.SynchronizationStatus.ASYNC_REPLAY_UPLOADED; } syncContext.Exception = null; } // onSynchronize call back with synchronization result onSynchronizeCallback(sgs, syncContext); } _IMQ.Clear(); } } }
public void OnMessage(com.sybase.afx.json.JsonMessage msg) { string _notification = msg.GetHeaders().GetNullableString("SUPObjCmd"); bool _reregistered = (_notification != null && _notification.Equals("reregister")); if (_reregistered) { YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetCallbackHandler().OnSubscriptionEnd(); return; } string method = msg.GetHeaders().GetString("method"); bool _isAsync = "asyncReplayCompleted".Equals(method); string serverRemoteId = msg.GetHeaders().GetNullableString("remoteId"); string clientRemoteId = GetRemoteId(); if (serverRemoteId != null && clientRemoteId != null && !serverRemoteId.Equals(clientRemoteId)) { return; } bool _isTcn = "tcn".Equals(method); if (!_isAsync && !_isTcn) { return; } com.sybase.afx.json.JsonObject _content = (com.sybase.afx.json.JsonObject)(msg.GetContent()); string userContext = _content.GetString("userContext"); string synchronizationGroup = _content.GetString("synchronizationGroup"); Sybase.Persistence.SynchronizationContext syncContext = new Sybase.Persistence.SynchronizationContext(); syncContext.UserContext = userContext; Sybase.Collections.GenericList <Sybase.Persistence.ISynchronizationGroup> sgs = new Sybase.Collections.GenericList <Sybase.Persistence.ISynchronizationGroup>(); foreach (string sg in com.sybase.afx.util.StringUtil.GetCommaSeparatedList(synchronizationGroup)) { sgs.Add(YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetSynchronizationGroup(sg)); } if (_isTcn) { syncContext.Status = Sybase.Persistence.SynchronizationStatus.STARTING_ON_NOTIFICATION; } else { syncContext.Status = Sybase.Persistence.SynchronizationStatus.ASYNC_REPLAY_COMPLETED; } if (YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetCallbackHandler().OnSynchronize(sgs, syncContext) == Sybase.Persistence.SynchronizationAction.CANCEL) { return; } try { YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.BeginSynchronize(sgs, userContext); } catch (Sybase.Persistence.SynchronizeException ex) { syncContext.Exception = ex; syncContext.Status = Sybase.Persistence.SynchronizationStatus.ERROR; YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetCallbackHandler().OnSynchronize(sgs, syncContext); throw ex; } syncContext.Status = Sybase.Persistence.SynchronizationStatus.FINISHING; YPF.Comercial.RRCC.SUP.CRMMobileDesaDB.GetCallbackHandler().OnSynchronize(sgs, syncContext); }