Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
33ab0c82
Commit
33ab0c82
authored
Dec 24, 2019
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move network stuffs into mirai-core
parent
9534723f
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
177 additions
and
57 deletions
+177
-57
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
...roidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
+13
-0
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
...mmonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
+68
-0
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
...moe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
+22
-0
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
.../jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
+18
-0
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPCBot.kt
...c/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPCBot.kt
+5
-42
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/TIMPCBotNetworkHandler.kt
...n/net.mamoe.mirai.timpc/network/TIMPCBotNetworkHandler.kt
+4
-4
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/packet/event/EventPacketFactory.kt
...oe.mirai.timpc/network/packet/event/EventPacketFactory.kt
+2
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
+45
-9
No files found.
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
0 → 100644
View file @
33ab0c82
package
net.mamoe.mirai.qqandroid
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.utils.MiraiLogger
import
kotlin.coroutines.CoroutineContext
internal
actual
class
QQAndroidBot
actual
constructor
(
account
:
BotAccount
,
logger
:
MiraiLogger
?,
context
:
CoroutineContext
)
:
QQAndroidBotBase
(
account
,
logger
,
context
)
{
}
\ No newline at end of file
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
0 → 100644
View file @
33ab0c82
package
net.mamoe.mirai.qqandroid
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.BotImpl
import
net.mamoe.mirai.contact.*
import
net.mamoe.mirai.data.AddFriendResult
import
net.mamoe.mirai.data.ImageLink
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.MiraiLogger
import
kotlin.coroutines.CoroutineContext
internal
expect
class
QQAndroidBot
(
account
:
BotAccount
,
logger
:
MiraiLogger
?,
context
:
CoroutineContext
)
:
QQAndroidBotBase
@UseExperimental
(
MiraiInternalAPI
::
class
)
internal
abstract
class
QQAndroidBotBase
constructor
(
account
:
BotAccount
,
logger
:
MiraiLogger
?,
context
:
CoroutineContext
)
:
BotImpl
<
QQAndroidBotNetworkHandler
>(
account
,
logger
,
context
)
{
override
val
qqs
:
ContactList
<
QQ
>
get
()
=
TODO
(
"not implemented"
)
//To change initializer of created properties use File | Settings | File Templates.
override
fun
getQQ
(
id
:
Long
):
QQ
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
override
fun
createNetworkHandler
(
coroutineContext
:
CoroutineContext
):
QQAndroidBotNetworkHandler
{
return
QQAndroidBotNetworkHandler
(
this
as
QQAndroidBot
)
}
override
val
groups
:
ContactList
<
Group
>
get
()
=
TODO
(
"not implemented"
)
//To change initializer of created properties use File | Settings | File Templates.
override
suspend
fun
getGroup
(
id
:
GroupId
):
Group
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
override
suspend
fun
getGroup
(
internalId
:
GroupInternalId
):
Group
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
override
suspend
fun
getGroup
(
id
:
Long
):
Group
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
override
suspend
fun
login
(
configuration
:
BotConfiguration
)
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
override
suspend
fun
Image
.
getLink
():
ImageLink
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
override
suspend
fun
addFriend
(
id
:
Long
,
message
:
String
?,
remark
:
String
?):
AddFriendResult
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
override
suspend
fun
approveFriendAddRequest
(
id
:
Long
,
remark
:
String
?)
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
}
\ No newline at end of file
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
0 → 100644
View file @
33ab0c82
package
net.mamoe.mirai.qqandroid.network
import
kotlinx.coroutines.CompletableJob
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.SupervisorJob
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.qqandroid.QQAndroidBot
import
kotlin.coroutines.CoroutineContext
internal
class
QQAndroidBotNetworkHandler
(
override
val
bot
:
QQAndroidBot
)
:
BotNetworkHandler
()
{
override
val
supervisor
:
CompletableJob
=
SupervisorJob
(
bot
.
coroutineContext
[
Job
])
override
suspend
fun
login
()
{
TODO
(
"not implemented"
)
//To change body of created functions use File | Settings | File Templates.
}
override
suspend
fun
awaitDisconnection
()
{
TODO
()
}
override
val
coroutineContext
:
CoroutineContext
=
bot
.
coroutineContext
}
\ No newline at end of file
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
0 → 100644
View file @
33ab0c82
package
net.mamoe.mirai.qqandroid
import
kotlinx.coroutines.GlobalScope
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.alsoLogin
import
net.mamoe.mirai.utils.MiraiLogger
import
kotlin.coroutines.CoroutineContext
internal
actual
class
QQAndroidBot
actual
constructor
(
account
:
BotAccount
,
logger
:
MiraiLogger
?,
context
:
CoroutineContext
)
:
QQAndroidBotBase
(
account
,
logger
,
context
)
suspend
fun
main
()
{
val
bot
=
QQAndroidBot
(
BotAccount
(
1
,
""
),
null
,
GlobalScope
.
coroutineContext
).
alsoLogin
()
bot
.
network
.
awaitDisconnection
()
}
\ No newline at end of file
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPCBot.kt
View file @
33ab0c82
...
@@ -19,7 +19,7 @@ import net.mamoe.mirai.timpc.internal.RawGroupInfo
...
@@ -19,7 +19,7 @@ import net.mamoe.mirai.timpc.internal.RawGroupInfo
import
net.mamoe.mirai.timpc.network.GroupImpl
import
net.mamoe.mirai.timpc.network.GroupImpl
import
net.mamoe.mirai.timpc.network.MemberImpl
import
net.mamoe.mirai.timpc.network.MemberImpl
import
net.mamoe.mirai.timpc.network.QQImpl
import
net.mamoe.mirai.timpc.network.QQImpl
import
net.mamoe.mirai.timpc.network.TIMBotNetworkHandler
import
net.mamoe.mirai.timpc.network.TIM
PC
BotNetworkHandler
import
net.mamoe.mirai.timpc.network.handler.TemporaryPacketHandler
import
net.mamoe.mirai.timpc.network.handler.TemporaryPacketHandler
import
net.mamoe.mirai.timpc.network.packet.action.*
import
net.mamoe.mirai.timpc.network.packet.action.*
import
net.mamoe.mirai.timpc.network.packet.event.EventPacketFactory
import
net.mamoe.mirai.timpc.network.packet.event.EventPacketFactory
...
@@ -46,7 +46,7 @@ internal abstract class TIMPCBotBase constructor(
...
@@ -46,7 +46,7 @@ internal abstract class TIMPCBotBase constructor(
account
:
BotAccount
,
account
:
BotAccount
,
logger
:
MiraiLogger
?,
logger
:
MiraiLogger
?,
context
:
CoroutineContext
context
:
CoroutineContext
)
:
BotImpl
<
TIMBotNetworkHandler
>(
account
,
logger
?:
DefaultLogger
(
"Bot("
+
account
.
id
+
")"
),
context
)
{
)
:
BotImpl
<
TIM
PC
BotNetworkHandler
>(
account
,
logger
?:
DefaultLogger
(
"Bot("
+
account
.
id
+
")"
),
context
)
{
@UseExperimental
(
ExperimentalUnsignedTypes
::
class
)
@UseExperimental
(
ExperimentalUnsignedTypes
::
class
)
companion
object
{
companion
object
{
...
@@ -85,47 +85,10 @@ internal abstract class TIMPCBotBase constructor(
...
@@ -85,47 +85,10 @@ internal abstract class TIMPCBotBase constructor(
}
}
}
}
final
override
val
network
:
TIMBotNetworkHandler
get
()
=
_network
inline
val
sessionKey
:
SessionKey
get
()=
network
.
sessionKey
inline
val
sessionKey
:
SessionKey
get
()
=
network
.
sessionKey
override
fun
createNetworkHandler
(
coroutineContext
:
CoroutineContext
):
TIMPCBotNetworkHandler
{
return
TIMPCBotNetworkHandler
(
coroutineContext
,
this
as
TIMPCBot
)
private
lateinit
var
_network
:
TIMBotNetworkHandler
override
suspend
fun
login
(
configuration
:
BotConfiguration
)
=
reinitializeNetworkHandler
(
configuration
,
null
)
// shouldn't be suspend!! This function MUST NOT inherit the context from the caller because the caller(NetworkHandler) is going to close
internal
fun
tryReinitializeNetworkHandler
(
configuration
:
BotConfiguration
,
cause
:
Throwable
?
):
Job
=
launch
{
repeat
(
configuration
.
reconnectionRetryTimes
)
{
try
{
reinitializeNetworkHandler
(
configuration
,
cause
)
logger
.
info
(
"Reconnected successfully"
)
return
@
launch
}
catch
(
e
:
LoginFailedException
)
{
delay
(
configuration
.
reconnectPeriodMillis
)
}
}
}
private
suspend
fun
reinitializeNetworkHandler
(
configuration
:
BotConfiguration
,
cause
:
Throwable
?
)
{
logger
.
info
(
"BotAccount: $qqAccount"
)
logger
.
info
(
"Initializing BotNetworkHandler"
)
try
{
if
(
::
_network
.
isInitialized
)
{
_network
.
close
(
cause
)
}
}
catch
(
e
:
Exception
)
{
logger
.
error
(
"Cannot close network handler"
,
e
)
}
_network
=
TIMBotNetworkHandler
(
this
.
coroutineContext
+
configuration
,
this
as
TIMPCBot
)
_network
.
login
()
}
}
final
override
suspend
fun
addFriend
(
id
:
Long
,
message
:
String
?,
remark
:
String
?):
AddFriendResult
{
final
override
suspend
fun
addFriend
(
id
:
Long
,
message
:
String
?,
remark
:
String
?):
AddFriendResult
{
...
...
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/TIMBotNetworkHandler.kt
→
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/TIM
PC
BotNetworkHandler.kt
View file @
33ab0c82
...
@@ -37,7 +37,7 @@ internal expect val NetworkDispatcher: CoroutineDispatcher
...
@@ -37,7 +37,7 @@ internal expect val NetworkDispatcher: CoroutineDispatcher
*
*
* @see BotNetworkHandler
* @see BotNetworkHandler
*/
*/
internal
class
TIMBotNetworkHandler
internal
constructor
(
coroutineContext
:
CoroutineContext
,
bot
:
TIMPCBot
)
:
internal
class
TIM
PC
BotNetworkHandler
internal
constructor
(
coroutineContext
:
CoroutineContext
,
bot
:
TIMPCBot
)
:
BotNetworkHandler
(),
CoroutineScope
{
BotNetworkHandler
(),
CoroutineScope
{
override
val
bot
:
TIMPCBot
by
bot
.
unsafeWeakRef
()
override
val
bot
:
TIMPCBot
by
bot
.
unsafeWeakRef
()
override
val
supervisor
:
CompletableJob
=
SupervisorJob
(
coroutineContext
[
Job
])
override
val
supervisor
:
CompletableJob
=
SupervisorJob
(
coroutineContext
[
Job
])
...
@@ -160,7 +160,7 @@ internal class TIMBotNetworkHandler internal constructor(coroutineContext: Corou
...
@@ -160,7 +160,7 @@ internal class TIMBotNetworkHandler internal constructor(coroutineContext: Corou
with
(
id
.
factory
)
{
with
(
id
.
factory
)
{
loginHandler
!!
.
provideDecrypter
(
id
.
factory
)
loginHandler
!!
.
provideDecrypter
(
id
.
factory
)
.
decrypt
(
input
)
.
decrypt
(
input
)
.
decode
(
id
,
sequenceId
,
this
@TIMBotNetworkHandler
)
.
decode
(
id
,
sequenceId
,
this
@TIM
PC
BotNetworkHandler
)
}
}
}
finally
{
}
finally
{
input
.
close
()
input
.
close
()
...
@@ -272,7 +272,7 @@ internal class TIMBotNetworkHandler internal constructor(coroutineContext: Corou
...
@@ -272,7 +272,7 @@ internal class TIMBotNetworkHandler internal constructor(coroutineContext: Corou
Unit
Unit
}
}
override
val
owner
:
Bot
get
()
=
this
@TIMBotNetworkHandler
.
bot
override
val
owner
:
Bot
get
()
=
this
@TIM
PC
BotNetworkHandler
.
bot
override
fun
close
()
{
override
fun
close
()
{
loginHandler
?.
close
()
loginHandler
?.
close
()
...
@@ -452,7 +452,7 @@ internal class TIMBotNetworkHandler internal constructor(coroutineContext: Corou
...
@@ -452,7 +452,7 @@ internal class TIMBotNetworkHandler internal constructor(coroutineContext: Corou
BotLoginSucceedEvent
(
bot
).
broadcast
()
BotLoginSucceedEvent
(
bot
).
broadcast
()
val
configuration
=
currentBotConfiguration
()
val
configuration
=
currentBotConfiguration
()
heartbeatJob
=
this
@TIMBotNetworkHandler
.
launch
{
heartbeatJob
=
this
@TIM
PC
BotNetworkHandler
.
launch
{
while
(
socket
.
isOpen
)
{
while
(
socket
.
isOpen
)
{
delay
(
configuration
.
heartbeatPeriodMillis
)
delay
(
configuration
.
heartbeatPeriodMillis
)
with
(
bot
)
{
with
(
bot
)
{
...
...
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/network/packet/event/EventPacketFactory.kt
View file @
33ab0c82
...
@@ -7,7 +7,7 @@ import net.mamoe.mirai.Bot
...
@@ -7,7 +7,7 @@ import net.mamoe.mirai.Bot
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.network.packet.*
import
net.mamoe.mirai.network.packet.*
import
net.mamoe.mirai.timpc.network.TIMBotNetworkHandler
import
net.mamoe.mirai.timpc.network.TIM
PC
BotNetworkHandler
import
net.mamoe.mirai.qqAccount
import
net.mamoe.mirai.qqAccount
import
net.mamoe.mirai.timpc.network.packet.buildSessionPacket
import
net.mamoe.mirai.timpc.network.packet.buildSessionPacket
import
net.mamoe.mirai.utils.io.readIoBuffer
import
net.mamoe.mirai.utils.io.readIoBuffer
...
@@ -46,7 +46,7 @@ internal object EventPacketFactory : PacketFactory<Packet, SessionKey>(SessionKe
...
@@ -46,7 +46,7 @@ internal object EventPacketFactory : PacketFactory<Packet, SessionKey>(SessionKe
to
=
readUInt
().
toLong
(),
// clear semantic
to
=
readUInt
().
toLong
(),
// clear semantic
uniqueId
=
readIoBuffer
(
8
)
uniqueId
=
readIoBuffer
(
8
)
)
)
(
handler
as
TIMBotNetworkHandler
).
socket
.
sendPacket
(
EventPacketFactory
(
id
,
sequenceId
,
handler
.
bot
.
qqAccount
,
handler
.
sessionKey
,
eventIdentity
))
(
handler
as
TIM
PC
BotNetworkHandler
).
socket
.
sendPacket
(
EventPacketFactory
(
id
,
sequenceId
,
handler
.
bot
.
qqAccount
,
handler
.
sessionKey
,
eventIdentity
))
discardExact
(
2
)
// 1F 40
discardExact
(
2
)
// 1F 40
return
with
(
matchEventPacketFactory
(
readUShort
()))
{
parse
(
handler
.
bot
,
eventIdentity
)
}.
also
{
return
with
(
matchEventPacketFactory
(
readUShort
()))
{
parse
(
handler
.
bot
,
eventIdentity
)
}.
also
{
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
View file @
33ab0c82
...
@@ -2,15 +2,9 @@
...
@@ -2,15 +2,9 @@
package
net.mamoe.mirai
package
net.mamoe.mirai
import
kotlinx.coroutines.CoroutineExceptionHandler
import
kotlinx.coroutines.*
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.SupervisorJob
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.utils.DefaultLogger
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.LockFreeLinkedList
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.MiraiLogger
import
net.mamoe.mirai.utils.io.logStacktrace
import
net.mamoe.mirai.utils.io.logStacktrace
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
...
@@ -56,7 +50,49 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
...
@@ -56,7 +50,49 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
// region network
// region network
abstract
override
val
network
:
N
final
override
val
network
:
N
get
()
=
_network
private
lateinit
var
_network
:
N
override
suspend
fun
login
(
configuration
:
BotConfiguration
)
=
reinitializeNetworkHandler
(
configuration
,
null
)
// shouldn't be suspend!! This function MUST NOT inherit the context from the caller because the caller(NetworkHandler) is going to close
fun
tryReinitializeNetworkHandler
(
configuration
:
BotConfiguration
,
cause
:
Throwable
?
):
Job
=
launch
{
repeat
(
configuration
.
reconnectionRetryTimes
)
{
try
{
reinitializeNetworkHandler
(
configuration
,
cause
)
logger
.
info
(
"Reconnected successfully"
)
return
@
launch
}
catch
(
e
:
LoginFailedException
)
{
delay
(
configuration
.
reconnectPeriodMillis
)
}
}
}
private
suspend
fun
reinitializeNetworkHandler
(
configuration
:
BotConfiguration
,
cause
:
Throwable
?
)
{
logger
.
info
(
"BotAccount: $qqAccount"
)
logger
.
info
(
"Initializing BotNetworkHandler"
)
try
{
if
(
::
_network
.
isInitialized
)
{
_network
.
close
(
cause
)
}
}
catch
(
e
:
Exception
)
{
logger
.
error
(
"Cannot close network handler"
,
e
)
}
_network
=
createNetworkHandler
(
this
.
coroutineContext
+
configuration
)
_network
.
login
()
}
protected
abstract
fun
createNetworkHandler
(
coroutineContext
:
CoroutineContext
):
N
// endregion
// endregion
@UseExperimental
(
MiraiInternalAPI
::
class
)
@UseExperimental
(
MiraiInternalAPI
::
class
)
...
...
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