Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_34031325
engine
提交
2c8ac3fa
E
engine
项目概览
qq_34031325
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2c8ac3fa
编写于
1月 15, 2016
作者:
C
Collin Jackson
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2265 from collinjackson/ios_value_child
Support for value and child events on Firebase iOS
上级
d9c05cee
e24f374a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
94 addition
and
4 deletion
+94
-4
sky/services/firebase/ios/firebase_impl.h
sky/services/firebase/ios/firebase_impl.h
+6
-0
sky/services/firebase/ios/firebase_impl.mm
sky/services/firebase/ios/firebase_impl.mm
+88
-4
未找到文件。
sky/services/firebase/ios/firebase_impl.h
浏览文件 @
2c8ac3fa
...
...
@@ -30,6 +30,10 @@ class FirebaseImpl : public ::firebase::Firebase {
void
GetChild
(
const
mojo
::
String
&
path
,
mojo
::
InterfaceRequest
<
Firebase
>
child
)
override
;
void
AddValueEventListener
(
::
firebase
::
ValueEventListenerPtr
listener
)
override
;
void
AddChildEventListener
(
::
firebase
::
ChildEventListenerPtr
listener
)
override
;
void
ObserveSingleEventOfType
(
::
firebase
::
EventType
eventType
,
const
ObserveSingleEventOfTypeCallback
&
callback
)
override
;
...
...
@@ -41,6 +45,8 @@ class FirebaseImpl : public ::firebase::Firebase {
private:
mojo
::
StrongBinding
<::
firebase
::
Firebase
>
binding_
;
::
Firebase
*
client_
;
std
::
vector
<::
firebase
::
ValueEventListenerPtr
>
value_event_listeners_
;
std
::
vector
<::
firebase
::
ChildEventListenerPtr
>
child_event_listeners_
;
DISALLOW_COPY_AND_ASSIGN
(
FirebaseImpl
);
};
...
...
sky/services/firebase/ios/firebase_impl.mm
浏览文件 @
2c8ac3fa
...
...
@@ -12,6 +12,20 @@ namespace sky {
namespace
services
{
namespace
firebase
{
::
firebase
::
DataSnapshotPtr
toMojoSnapshot
(
FDataSnapshot
*
snapshot
)
{
::
firebase
::
DataSnapshotPtr
mojoSnapshot
(
::
firebase
::
DataSnapshot
::
New
());
mojoSnapshot
->
key
=
base
::
SysNSStringToUTF8
(
snapshot
.
key
);
mojoSnapshot
->
value
=
base
::
SysNSStringToUTF8
(
snapshot
.
value
);
return
mojoSnapshot
.
Pass
();
}
::
firebase
::
ErrorPtr
toMojoError
(
NSError
*
error
)
{
::
firebase
::
ErrorPtr
mojoError
(
::
firebase
::
Error
::
New
());
mojoError
->
code
=
error
.
code
;
mojoError
->
message
=
base
::
SysNSStringToUTF8
(
error
.
description
);
return
mojoError
.
Pass
();
}
FirebaseImpl
::
FirebaseImpl
(
mojo
::
InterfaceRequest
<::
firebase
::
Firebase
>
request
)
:
binding_
(
this
,
request
.
Pass
())
{}
...
...
@@ -35,6 +49,79 @@ void FirebaseImpl::GetChild(
child
->
client_
=
[[
client_
childByAppendingPath
:
@
(
path
.
data
())]
retain
];
}
void
FirebaseImpl
::
AddValueEventListener
(
::
firebase
::
ValueEventListenerPtr
ptr
)
{
::
firebase
::
ValueEventListener
*
listener
=
ptr
.
get
();
FirebaseHandle
handle
=
[
client_
observeEventType
:
FEventTypeValue
withBlock:
^
(
FDataSnapshot
*
snapshot
)
{
listener
->
OnDataChange
(
toMojoSnapshot
(
snapshot
));
}
withCancelBlock
:
^
(
NSError
*
error
)
{
listener
->
OnCancelled
(
toMojoError
(
error
));
}];
ptr
.
set_connection_error_handler
([
this
,
handle
,
listener
]()
{
[
client_
removeObserverWithHandle
:
handle
];
auto
it
=
std
::
find_if
(
value_event_listeners_
.
begin
(),
value_event_listeners_
.
end
(),
[
listener
](
const
::
firebase
::
ValueEventListenerPtr
&
p
)
{
return
(
p
.
get
()
==
listener
);
});
DCHECK
(
it
!=
value_event_listeners_
.
end
());
value_event_listeners_
.
erase
(
it
);
});
value_event_listeners_
.
emplace_back
(
ptr
.
Pass
());
}
void
FirebaseImpl
::
AddChildEventListener
(
::
firebase
::
ChildEventListenerPtr
ptr
)
{
::
firebase
::
ChildEventListener
*
listener
=
ptr
.
get
();
void
(
^
cancelBlock
)(
NSError
*
)
=
^
(
NSError
*
error
)
{
listener
->
OnCancelled
(
toMojoError
(
error
));
};
void
(
^
addedBlock
)(
FDataSnapshot
*
,
NSString
*
)
=
^
(
FDataSnapshot
*
snapshot
,
NSString
*
prevKey
)
{
listener
->
OnChildAdded
(
toMojoSnapshot
(
snapshot
),
base
::
SysNSStringToUTF8
(
prevKey
));
};
FirebaseHandle
addedHandle
=
[
client_
observeEventType
:
FEventTypeChildAdded
andPreviousSiblingKeyWithBlock:
addedBlock
withCancelBlock:
cancelBlock
];
void
(
^
changedBlock
)(
FDataSnapshot
*
,
NSString
*
)
=
^
(
FDataSnapshot
*
snapshot
,
NSString
*
prevKey
)
{
listener
->
OnChildChanged
(
toMojoSnapshot
(
snapshot
),
base
::
SysNSStringToUTF8
(
prevKey
));
};
FirebaseHandle
changedHandle
=
[
client_
observeEventType
:
FEventTypeChildChanged
andPreviousSiblingKeyWithBlock:
changedBlock
withCancelBlock:
cancelBlock
];
void
(
^
movedBlock
)(
FDataSnapshot
*
,
NSString
*
)
=
^
(
FDataSnapshot
*
snapshot
,
NSString
*
prevKey
)
{
listener
->
OnChildMoved
(
toMojoSnapshot
(
snapshot
),
base
::
SysNSStringToUTF8
(
prevKey
));
};
FirebaseHandle
movedHandle
=
[
client_
observeEventType
:
FEventTypeChildMoved
andPreviousSiblingKeyWithBlock:
movedBlock
withCancelBlock:
cancelBlock
];
void
(
^
removedBlock
)(
FDataSnapshot
*
snapshot
)
=
^
(
FDataSnapshot
*
snapshot
)
{
listener
->
OnChildRemoved
(
toMojoSnapshot
(
snapshot
));
};
FirebaseHandle
removedHandle
=
[
client_
observeEventType
:
FEventTypeChildRemoved
withBlock:
removedBlock
withCancelBlock:
cancelBlock
];
ptr
.
set_connection_error_handler
(
[
this
,
addedHandle
,
changedHandle
,
movedHandle
,
removedHandle
,
listener
]()
{
[
client_
removeObserverWithHandle
:
addedHandle
];
[
client_
removeObserverWithHandle
:
changedHandle
];
[
client_
removeObserverWithHandle
:
movedHandle
];
[
client_
removeObserverWithHandle
:
removedHandle
];
auto
it
=
std
::
find_if
(
child_event_listeners_
.
begin
(),
child_event_listeners_
.
end
(),
[
listener
](
const
::
firebase
::
ChildEventListenerPtr
&
p
)
{
return
(
p
.
get
()
==
listener
);
});
DCHECK
(
it
!=
child_event_listeners_
.
end
());
child_event_listeners_
.
erase
(
it
);
}
);
child_event_listeners_
.
emplace_back
(
ptr
.
Pass
());
}
void
FirebaseImpl
::
ObserveSingleEventOfType
(
::
firebase
::
EventType
eventType
,
const
ObserveSingleEventOfTypeCallback
&
callback
)
{
...
...
@@ -42,10 +129,7 @@ void FirebaseImpl::ObserveSingleEventOfType(
new
ObserveSingleEventOfTypeCallback
(
callback
);
[
client_
observeSingleEventOfType
:
static_cast
<
FEventType
>
(
eventType
)
withBlock:
^
(
FDataSnapshot
*
snapshot
)
{
::
firebase
::
DataSnapshotPtr
mojoSnapshot
(
::
firebase
::
DataSnapshot
::
New
());
mojoSnapshot
->
key
=
base
::
SysNSStringToUTF8
(
snapshot
.
key
);
mojoSnapshot
->
value
=
base
::
SysNSStringToUTF8
(
snapshot
.
value
);
copyCallback
->
Run
(
mojoSnapshot
.
Pass
());
copyCallback
->
Run
(
toMojoSnapshot
(
snapshot
));
delete
copyCallback
;
}];
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录