Commit Graph

5428 Commits

Author SHA1 Message Date
Him188
cde13062d9 Ensure network closed on initialization failure 2021-06-16 19:42:58 +08:00
Him188
fc477e0122 Do not wrap exception into ISE on reaching max attempts 2021-06-16 17:26:57 +08:00
Him188
a38f24cbe5 Redesign connection maintenance mechanism:
Reconnection is directed by `BotOfflineEvent`.

### Event Broadcasting

- PacketFactory `MessageSvcPushForceOffline` closes network with `ForceOfflineException`.
 - `network.close(cause)` pass the cause to state observer from `QQAndroidBot.stateObserverChain`, the observer broadcasts as follows:
   - Nothing if `cause` is `ForceOfflineException` or `BotClosedByEvent`(which is broadcast by user)
   - `BotOfflineEvent.Dropped` if cause is NetworkException and is recoverable(which is from Netty handlers)
   - `BotOfflineEvent.Force` if cause is `ForceOfflineException` is from the factory mentioned above.
   - `BotOfflineEvent.Active` otherwise(any other unexpected exceptions considered as an error)

### Deciding whether to reconnect

User can listen and change `BotOfflineEvent.reconnect` to decide. Default values are determined by `BotConfiguration`.

### Event listening

- Component `BotOfflineEventMonitor` listens `BotOfflineEvent`, logs the event for users, and launches a coroutine to do `network.resumeConnection` to notify the selector to renew an instance.
- `BotOnlineWatchdog` in `SelectorNetworkHandler` is removed.
- Selector now handles `maxAttempts` correctly in such a way that `awaitResumeInstance` does not throw exception until maximum attempts reached.
- On every attempt, new exceptions are logged to provide debugging information, and further duplications are ignored.
2021-06-16 16:58:20 +08:00
Him188
45ba713f73 Optimize HeartbeatFailedException.toString: show information of its cause 2021-06-16 03:09:21 +08:00
Him188
ab7c49a0d5 Remove log in BotClientHolderImpl 2021-06-16 03:06:54 +08:00
Him188
b219ba986e Review network ComponentStorage framework and improve connection logics, support reconnection on force offline (closes #1330, close #1331), and on bad network.
- Remove `FactoryKeepAliveNetworkHandlerSelector` and add `KeepAliveNetworkHandlerSelector`;
- Review the storage of `QQAndroidBotClient`, extract it as a `BotClientHolder`;
- Introduce bot-level components that lasts with the lifecycle of `Bot`, and network-level components accordingly;
- Dynamically re-create the context given to `NetworkHandler` in selector, to use network-level components, including `BotClientHolder`, that allows a simple reinitialization of `BotClient`;
- Handles the situation when physical network broken on logging in, giving a hint to user and halts the log-in process and transfer the responsibility of reconnecting to selector;
- Send logout only in `Bot.close` (manual close).
2021-06-16 03:00:50 +08:00
Him188
e65593b2af Add BeforeStateChangedObserver 2021-06-16 02:37:06 +08:00
Him188
23c1a67479 Add naming notes for StatSvc.Register in logging 2021-06-16 02:29:05 +08:00
Him188
ad4f7a6232 Show OutgoingPacket.displayName in logging 2021-06-16 02:28:51 +08:00
Him188
24ac4ffa95 Add ConcurrentComponentStorage builder 2021-06-16 01:52:42 +08:00
Him188
e6119e6301 Throw NoSuchComponentException with full details in CombinedComponentStorage.get 2021-06-16 01:52:27 +08:00
Him188
9933fab4c5 Add ComponentStorage?.withPrimary 2021-06-16 01:51:50 +08:00
Him188
f4ec905aff Make CombinedStateObserver.toString more readable 2021-06-16 01:51:26 +08:00
Him188
750ab0db37 Fix StackOverflowError on calling bot.client in tests with TestSsoProcessor, fix #1332 2021-06-15 20:47:50 +08:00
Him188
794315e169 Add one-key install to UserManual, #1329 2021-06-13 11:36:21 +08:00
Him188
bebb786b9a Fix build 2021-06-13 11:10:12 +08:00
Him188
c9f98e46d7 Implement heartbeat periods and timeouts correctly, #1255 2021-06-13 10:59:11 +08:00
Him188
43b13d158f Implement HeartbeatStrategy, #1226 2021-06-13 10:50:55 +08:00
Karlatemp
e9d9d56489
Avoid network congestion 2021-06-11 21:19:35 +08:00
Karlatemp
05a8419fb7
Fix internal error in uploading private images; fix #1317 2021-06-10 22:49:24 +08:00
Him188
1e2ab736c2 Use bot.closeAndJoin() in tests 2021-06-08 17:13:37 +08:00
Him188
81258488cb Check isActive in BotOnlineWatchdog 2021-06-08 17:13:25 +08:00
Him188
300882ea18 Redesign ComponentStorage initialization for clearer tests 2021-06-08 17:13:15 +08:00
Him188
f9da72c136 Convert DEFAULT_BLACKLIST to function and initialize the immutable set only once 2021-06-08 16:16:01 +08:00
Him188
65a3ffc147 Rename ComponentScope.plus to .withFallback 2021-06-08 16:14:23 +08:00
Him188
c8def70594 Add bot.job as parent of NetworkHandlerSupport 2021-06-08 16:14:23 +08:00
Him188
5f7f350eb5 Close PacketDecodePipeline.channel on scope closure 2021-06-08 16:14:23 +08:00
Him188
038be54444 Remote pcap4j from jvmTest 2021-06-08 16:14:23 +08:00
Him188
19bc781854 Add kotlinx-coroutines-debug to jvmTest 2021-06-08 16:14:23 +08:00
AdoptOSS
7732014cbd
fix: do trimming properly in startsWith & endsWith, #1282 (#1314)
Co-authored-by: ArcticLampyrid <arcticlampyrid@outlook.com>
2021-06-08 15:42:37 +08:00
Him188
ad3bd4cc0d Stop BotOnlineWatchdog if bot is closed 2021-06-08 12:19:05 +08:00
Him188
54a78313c8 Improve logging on exceptions and correctly handle CancellationException when Bot.close is invoked. 2021-06-08 12:18:40 +08:00
Him188
3e8fc8e1ec Do not pass failed IncomingPacket to PacketFactorys 2021-06-08 12:16:26 +08:00
Him188
725b502d9e Add notes for blacklist 2021-06-08 12:04:54 +08:00
Him188
a53f97cb6f Add OnlinePush.ReqPush to blacklist 2021-06-08 12:00:35 +08:00
Him188
56165c82aa Fix ignored friend message event logging, fix #1312 2021-06-08 12:00:20 +08:00
Him188
a45ae814c1 Fix typo in docs/README.md 2021-06-08 11:29:32 +08:00
Rebuild
7373787fc2 Add mirai-api-http ruby sdk to community sdk list
Closes #1299
2021-06-08 11:28:29 +08:00
Him188
091906577a Add StatSvc.SimpleGet to DEFAULT_BLACKLIST 2021-06-08 11:25:36 +08:00
AHpxChina
768dbf68d8
Added Mirai.Net (#1292) 2021-06-08 11:24:54 +08:00
Him188
a9489567d0
Clearify docs for ExternalResource and RemoteFile (#1248)
* Update code docs for ExternalResource emphasising its properties

* Update code docs for ExternalResource emphasising its representative file location

* Update mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt

* Update mirai-core-api/src/commonMain/kotlin/utils/RemoteFile.kt

* Clarify docs
2021-06-08 11:23:09 +08:00
Him188
8312a5bc98 Temporarily disable NettyHandlerEventTest to make build success #1311 2021-06-07 22:03:12 +08:00
Him188
e0f9c311f2 Temporarily disable tests BotOffline from OK TO CLOSED and BotOfflineEvent after successful reconnection to make build success #1311 2021-06-07 22:00:22 +08:00
Him188
295c95c09f apiDump 2021-06-07 19:06:14 +08:00
Him188
6b442b251f Introduce AbstractEventTest 2021-06-07 18:56:33 +08:00
Him188
684b844b44 Move implementation of EventDispatcher.joinBroadcast to tests and mark it @TestOnly 2021-06-07 18:46:40 +08:00
Him188
cf82f96672 Opt-in TestOnly for test 2021-06-07 18:42:46 +08:00
Him188
fc96ba96dd Add _EventBroadcast to allow tests to overrode implementation of Event.broadcast 2021-06-07 18:29:15 +08:00
Him188
9619338d5b Catch and forward event broadcasting to EventDispatcher 2021-06-07 18:18:07 +08:00
Him188
9cf45bd9ca Ignore MessageSvc.PushNotify in logging 2021-06-07 18:14:24 +08:00