Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
GMPhobos
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gengmeiios
GMPhobos
Commits
ab34ff42
Commit
ab34ff42
authored
Apr 11, 2020
by
井庆林
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
code review
parent
34057f67
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
19 deletions
+30
-19
NewPhobos.m
GMPhobos/Classes/NewPhobos.m
+15
-7
PhobosDataManager.h
GMPhobos/Classes/PhobosDataManager.h
+3
-3
PhobosDataManager.m
GMPhobos/Classes/PhobosDataManager.m
+12
-9
No files found.
GMPhobos/Classes/NewPhobos.m
View file @
ab34ff42
...
...
@@ -420,14 +420,15 @@ static NewPhobos *_sharedClient;
* 处理发送数据
*/
+
(
void
)
disposeSendDataWithImmediately
:
(
BOOL
)
immediately
{
NSArray
<
PhobosSendDataEntity
*>
*
entities
=
[
PhobosDataManager
fetchToBeSendDataEntities
];
if
(
immediately
||
entities
.
count
>=
PhobosShardCount
)
{
[
PhobosDataManager
updateDataEntities
:
entities
sendStatus
:
PhobosDataSendStatusSending
];
[
PhobosSendManager
sendDataWithEntities
:
entities
completion
:
^
(
NSArray
<
PhobosSendDataEntity
*>
*
_Nonnull
finishEntities
,
NSInteger
code
)
{
[
PhobosDataManager
updateDataEntities
:
finishEntities
sendStatus
:(
code
==
200
?
PhobosDataSendStatusFinish
:
PhobosDataSendStatusError
)];
NSInteger
count
=
[
PhobosDataManager
fetchCountOfToBeSendEntities
];
if
(
immediately
||
count
>=
PhobosShardCount
)
{
[
PhobosDataManager
fetchToBeSendDataEntitiesWithEntitiesBlock
:
^
(
NSArray
<
PhobosSendDataEntity
*>
*
entities
)
{
[
PhobosDataManager
updateDataEntities
:
entities
sendStatus
:
PhobosDataSendStatusSending
];
[
PhobosSendManager
sendDataWithEntities
:
entities
completion
:
^
(
NSArray
<
PhobosSendDataEntity
*>
*
_Nonnull
finishEntities
,
NSInteger
code
)
{
[
PhobosDataManager
updateDataEntities
:
finishEntities
sendStatus
:(
code
==
200
?
PhobosDataSendStatusFinish
:
PhobosDataSendStatusError
)];
}];
}];
}
}
@end
...
...
@@ -441,7 +442,14 @@ static NewPhobos *_sharedClient;
/** 获取待发送埋点数据, 用同步来保障异步获取数据 */
+
(
NSArray
*
)
fetchToBeSendPhobosData
{
return
[
PhobosDataManager
fetchToBeSendDataEntities
];
dispatch_semaphore_t
semaphore
=
dispatch_semaphore_create
(
0
);
__block
NSArray
<
PhobosSendDataEntity
*>
*
entityArray
;
[
PhobosDataManager
fetchToBeSendDataEntitiesWithEntitiesBlock
:
^
(
NSArray
<
PhobosSendDataEntity
*>
*
entities
)
{
entityArray
=
entities
;
dispatch_semaphore_signal
(
semaphore
);
}];
dispatch_semaphore_wait
(
semaphore
,
DISPATCH_TIME_FOREVER
);
return
entityArray
;
}
/** 清除待发送埋点数据缓存 */
...
...
GMPhobos/Classes/PhobosDataManager.h
View file @
ab34ff42
...
...
@@ -21,12 +21,12 @@ typedef NS_ENUM(NSInteger, PhobosDataSendStatus) {
@interface
PhobosDataManager
:
NSObject
/** 获取待发送数据,包含待发送数据和发送失败数据 */
+
(
NSArray
<
PhobosSendDataEntity
*>
*
)
fetchToBeSendDataEntities
;
+
(
void
)
fetchToBeSendDataEntitiesWithEntitiesBlock
:(
nonnull
void
(
^
)(
NSArray
<
PhobosSendDataEntity
*>
*
entities
))
entitiesBlock
;
/**
* 通过 searchFilter 获取数据
*/
+
(
NSArray
<
PhobosSendDataEntity
*>
*
)
fetchDataEntitiesWithPredicate
:(
NSPredicate
*
)
searchFilter
;
+
(
void
)
fetchDataEntitiesWithPredicate
:(
NSPredicate
*
)
searchFilter
entitiesBlock
:(
nonnull
void
(
^
)(
NSArray
<
PhobosSendDataEntity
*>
*
entities
))
entitiesBlock
;
/**
* 获取待发送和发送失败的数据数量
...
...
@@ -36,7 +36,7 @@ typedef NS_ENUM(NSInteger, PhobosDataSendStatus) {
/**
* 通过 searchFilter 获取数据数量
*/
+
(
NSUInteger
)
fetchCountOfEntities
;
+
(
NSUInteger
)
fetchCountOfEntities
WithPredicate
:(
NSPredicate
*
)
searchFilter
;
/**
* 插入埋点数据
...
...
GMPhobos/Classes/PhobosDataManager.m
View file @
ab34ff42
...
...
@@ -46,27 +46,30 @@ static dispatch_semaphore_t phobos_rd_semaphore_t;
/** 将上次没有获取到发送结果的数据的状态修改为发送失败,待下次重新发送 */
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d"
,
PhobosDataSendStatusSending
];
NSArray
<
PhobosSendDataEntity
*>
*
entities
=
[
self
fetchDataEntitiesWithPredicate
:
predicate
];
[
self
updateDataEntities
:
entities
sendStatus
:
PhobosDataSendStatusError
];
[
self
fetchDataEntitiesWithPredicate
:
predicate
entitiesBlock
:
^
(
NSArray
<
PhobosSendDataEntity
*>
*
entities
)
{
[
self
updateDataEntities
:
entities
sendStatus
:
PhobosDataSendStatusError
];
}];
/** 将发送成功的数据删除 */
NSPredicate
*
finishPredicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d"
,
PhobosDataSendStatusFinish
];
// [PhobosSendDataEntity MR_deleteAllMatchingPredicate:finishPredicate];
NSArray
<
PhobosSendDataEntity
*>
*
finishEntities
=
[
self
fetchDataEntitiesWithPredicate
:
finishPredicate
];
[
self
deleteDataEntities
:
finishEntities
];
[
self
fetchDataEntitiesWithPredicate
:
finishPredicate
entitiesBlock
:
^
(
NSArray
<
PhobosSendDataEntity
*>
*
entities
)
{
[
self
deleteDataEntities
:
entities
];
}
];
});
}
+
(
NSArray
<
PhobosSendDataEntity
*>
*
)
fetchToBeSendDataEntities
{
+
(
void
)
fetchToBeSendDataEntitiesWithEntitiesBlock
:
(
void
(
^
)(
NSArray
<
PhobosSendDataEntity
*>
*
))
entitiesBlock
{
NSPredicate
*
predicate
=
[
NSPredicate
predicateWithFormat
:
@"status = %d or status = %d"
,
PhobosDataSendStatusToBeSend
,
PhobosDataSendStatusError
];
return
[
self
fetchDataEntitiesWithPredicate
:
predicate
];
[
self
fetchDataEntitiesWithPredicate
:
predicate
entitiesBlock
:
entitiesBlock
];
}
+
(
NSArray
<
PhobosSendDataEntity
*>
*
)
fetchDataEntitiesWithPredicate
:
(
NSPredicate
*
)
searchFilter
{
+
(
void
)
fetchDataEntitiesWithPredicate
:
(
NSPredicate
*
)
searchFilter
entitiesBlock
:
(
nonnull
void
(
^
)(
NSArray
<
PhobosSendDataEntity
*>
*
))
entitiesBlock
{
dispatch_semaphore_wait
(
phobos_semaphore_t
,
DISPATCH_TIME_FOREVER
);
NSArray
<
PhobosSendDataEntity
*>
*
entities
=
[
PhobosSendDataEntity
MR_findAllWithPredicate
:
searchFilter
inContext
:
PhobosDefaultContext
];
if
(
entitiesBlock
)
{
entitiesBlock
(
entities
);
}
dispatch_semaphore_signal
(
phobos_semaphore_t
);
return
entities
;
}
+
(
NSUInteger
)
fetchCountOfToBeSendEntities
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment