Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

Commit e5ba4b5

Browse files
committed
Add default implementations for input/output
1 parent 4e40b6d commit e5ba4b5

File tree

7 files changed

+120
-64
lines changed

7 files changed

+120
-64
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.codeoverflow.chatoverflow.requirement
2+
3+
import org.codeoverflow.chatoverflow.WithLogger
4+
import org.codeoverflow.chatoverflow.api.io.input.Input
5+
import org.codeoverflow.chatoverflow.connector.Connector
6+
7+
import scala.collection.mutable
8+
9+
abstract class InputImpl[C <: Connector] extends Connection[C] with Input with WithLogger {
10+
11+
/**
12+
* Inits this connection, checks if teh source connector is defined, and can be inited, then calls start
13+
*
14+
* @return if this input could be successfully inited
15+
*/
16+
override def init(): Boolean = {
17+
if (sourceConnector.isDefined) {
18+
if (sourceConnector.get.init()) {
19+
start()
20+
} else false
21+
} else {
22+
logger warn "Source connector not set."
23+
false
24+
}
25+
}
26+
27+
28+
/**
29+
* Start the input, called after source connector did init
30+
*
31+
* @return true if starting the input was successful, false if some problems occurred
32+
*/
33+
def start(): Boolean
34+
35+
36+
/**
37+
* Serializes this object into a string to save it to a config
38+
*
39+
* @return serialized
40+
*/
41+
override def serialize(): String = getSourceIdentifier
42+
43+
/**
44+
* Deserialize a string to apply provided config settings to this object
45+
*
46+
* @param value should be serialized
47+
*/
48+
override def deserialize(value: String): Unit = setSourceConnector(value)
49+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.codeoverflow.chatoverflow.requirement
2+
3+
import org.codeoverflow.chatoverflow.WithLogger
4+
import org.codeoverflow.chatoverflow.api.io.output.Output
5+
import org.codeoverflow.chatoverflow.connector.Connector
6+
7+
import scala.collection.mutable
8+
9+
abstract class OutputImpl[C <: Connector] extends Connection[C] with Output with WithLogger {
10+
11+
/**
12+
* Inits this connection, checks if teh source connector is defined, and can be inited, then calls start
13+
*
14+
* @return if this input could be successfully inited
15+
*/
16+
override def init(): Boolean = {
17+
if (sourceConnector.isDefined) {
18+
if (sourceConnector.get.init()) {
19+
start()
20+
} else false
21+
} else {
22+
logger warn "Source connector not set."
23+
false
24+
}
25+
}
26+
27+
28+
/**
29+
* Start the input, called after source connector did init
30+
*
31+
* @return true if starting the input was successful, false if some problems occurred
32+
*/
33+
def start(): Boolean
34+
35+
36+
/**
37+
* Serializes this object into a string to save it to a config
38+
*
39+
* @return serialized
40+
*/
41+
override def serialize(): String = getSourceIdentifier
42+
43+
/**
44+
* Deserialize a string to apply provided config settings to this object
45+
*
46+
* @param value should be serialized
47+
*/
48+
override def deserialize(value: String): Unit = setSourceConnector(value)
49+
}

src/main/scala/org/codeoverflow/chatoverflow/requirement/service/discord/impl/DiscordChatInputImpl.scala

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package org.codeoverflow.chatoverflow.requirement.service.discord.impl
22

3-
import java.awt.Color
43
import java.util
54
import java.util.Calendar
65
import java.util.function.{BiConsumer, Consumer}
76

8-
import net.dv8tion.jda.api.entities.{ChannelType, Message, MessageType, PrivateChannel, TextChannel}
7+
import net.dv8tion.jda.api.entities._
98
import net.dv8tion.jda.api.events.message.{MessageDeleteEvent, MessageReceivedEvent, MessageUpdateEvent}
109
import org.codeoverflow.chatoverflow.WithLogger
1110
import org.codeoverflow.chatoverflow.api.io.dto.chat.discord.{DiscordChannel, DiscordChatCustomEmoticon, DiscordChatMessage, DiscordChatMessageAuthor}
1211
import org.codeoverflow.chatoverflow.api.io.input.chat.DiscordChatInput
1312
import org.codeoverflow.chatoverflow.registry.Impl
14-
import org.codeoverflow.chatoverflow.requirement.Connection
13+
import org.codeoverflow.chatoverflow.requirement.InputImpl
1514
import org.codeoverflow.chatoverflow.requirement.service.discord.DiscordChatConnector
1615

1716
import scala.collection.JavaConverters._
@@ -21,7 +20,7 @@ import scala.collection.mutable.ListBuffer
2120
* This is the implementation of the discord chat input, using the discord connector.
2221
*/
2322
@Impl(impl = classOf[DiscordChatInput], connector = classOf[DiscordChatConnector])
24-
class DiscordChatInputImpl extends Connection[DiscordChatConnector] with DiscordChatInput with WithLogger {
23+
class DiscordChatInputImpl extends InputImpl[DiscordChatConnector] with DiscordChatInput with WithLogger {
2524

2625
private var channelId = getSourceIdentifier
2726
private val messages: ListBuffer[DiscordChatMessage] = ListBuffer[DiscordChatMessage]()
@@ -33,19 +32,12 @@ class DiscordChatInputImpl extends Connection[DiscordChatConnector] with Discord
3332
private val privateMessageEditHandler = ListBuffer[BiConsumer[DiscordChatMessage, DiscordChatMessage]]()
3433
private val privateMessageDeleteHandler = ListBuffer[Consumer[DiscordChatMessage]]()
3534

36-
override def init(): Boolean = {
37-
if (sourceConnector.isDefined) {
38-
if (sourceConnector.get.isRunning || sourceConnector.get.init()) {
39-
setChannel(getSourceIdentifier)
40-
sourceConnector.get.addMessageReceivedListener(onMessage)
41-
sourceConnector.get.addMessageUpdateListener(onMessageUpdate)
42-
sourceConnector.get.addMessageDeleteListener(onMessageDelete)
43-
true
44-
} else false
45-
} else {
46-
logger warn "Source connector not set."
47-
false
48-
}
35+
override def start(): Boolean = {
36+
setChannel(getSourceIdentifier)
37+
sourceConnector.get.addMessageReceivedListener(onMessage)
38+
sourceConnector.get.addMessageUpdateListener(onMessageUpdate)
39+
sourceConnector.get.addMessageDeleteListener(onMessageDelete)
40+
true
4941
}
5042

5143
/**
@@ -151,12 +143,6 @@ class DiscordChatInputImpl extends Connection[DiscordChatConnector] with Discord
151143

152144
override def getChannelId: String = channelId
153145

154-
override def serialize(): String = getSourceIdentifier
155-
156-
override def deserialize(value: String): Unit = {
157-
setSourceConnector(value)
158-
}
159-
160146
override def getMessage(messageId: String): DiscordChatMessage =
161147
messages.find(_.getId == messageId).getOrElse(privateMessages.find(_.getId == messageId).orNull)
162148
}

src/main/scala/org/codeoverflow/chatoverflow/requirement/service/mockup/impl/MockUpChatInputImpl.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import scala.collection.mutable.ListBuffer
1616
@Impl(impl = classOf[MockUpChatInput], connector = classOf[MockUpChatConnector])
1717
class MockUpChatInputImpl extends Connection[MockUpChatConnector] with MockUpChatInput with WithLogger {
1818

19-
// TODO: Rewrite code to fit to the new framework style using actors, a new parser, etc.
19+
// TODO: Rewrite code to fit to the new framework style using actors, a new parser, extend InputImpl etc.
2020

2121
private val messages: ListBuffer[ChatMessage[ChatMessageAuthor, Channel, ChatEmoticon]] = ListBuffer[ChatMessage[ChatMessageAuthor, Channel, ChatEmoticon]]()
2222
private val privateMessages: ListBuffer[ChatMessage[ChatMessageAuthor, Channel, ChatEmoticon]] = ListBuffer[ChatMessage[ChatMessageAuthor, Channel, ChatEmoticon]]()

src/main/scala/org/codeoverflow/chatoverflow/requirement/service/sample/impl/SampleInputImpl.scala

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,11 @@ package org.codeoverflow.chatoverflow.requirement.service.sample.impl
33
import org.codeoverflow.chatoverflow.WithLogger
44
import org.codeoverflow.chatoverflow.api.io.input.SampleInput
55
import org.codeoverflow.chatoverflow.registry.Impl
6-
import org.codeoverflow.chatoverflow.requirement.Connection
6+
import org.codeoverflow.chatoverflow.requirement.InputImpl
77
import org.codeoverflow.chatoverflow.requirement.service.sample.SampleConnector
88

99
@Impl(impl = classOf[SampleInput], connector = classOf[SampleConnector])
10-
class SampleInputImpl extends Connection[SampleConnector] with SampleInput with WithLogger {
11-
override def init(): Boolean = sourceConnector.get.init()
10+
class SampleInputImpl extends InputImpl[SampleConnector] with SampleInput with WithLogger {
1211

13-
override def serialize(): String = getSourceIdentifier
14-
15-
override def deserialize(value: String): Unit = setSourceConnector(value)
12+
override def start(): Boolean = true
1613
}

src/main/scala/org/codeoverflow/chatoverflow/requirement/service/twitch/chat/impl/TwitchChatInputImpl.scala

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import org.codeoverflow.chatoverflow.api.io.dto.chat.twitch.{TwitchChatEmoticon,
88
import org.codeoverflow.chatoverflow.api.io.dto.chat.{Channel, ChatEmoticon}
99
import org.codeoverflow.chatoverflow.api.io.input.chat._
1010
import org.codeoverflow.chatoverflow.registry.Impl
11-
import org.codeoverflow.chatoverflow.requirement.Connection
11+
import org.codeoverflow.chatoverflow.requirement.InputImpl
1212
import org.codeoverflow.chatoverflow.requirement.service.twitch.chat
1313
import org.pircbotx.hooks.events.{MessageEvent, UnknownEvent}
1414

@@ -19,7 +19,7 @@ import scala.collection.mutable.ListBuffer
1919
* This is the implementation of the twitch chat input, using the twitch connector.
2020
*/
2121
@Impl(impl = classOf[TwitchChatInput], connector = classOf[chat.TwitchChatConnector])
22-
class TwitchChatInputImpl extends Connection[chat.TwitchChatConnector] with TwitchChatInput with WithLogger {
22+
class TwitchChatInputImpl extends InputImpl[chat.TwitchChatConnector] with TwitchChatInput with WithLogger {
2323

2424
private val messages: ListBuffer[TwitchChatMessage] = ListBuffer[TwitchChatMessage]()
2525
private val privateMessages: ListBuffer[TwitchChatMessage] = ListBuffer[TwitchChatMessage]()
@@ -30,17 +30,10 @@ class TwitchChatInputImpl extends Connection[chat.TwitchChatConnector] with Twit
3030
private val messageHandler = ListBuffer[Consumer[TwitchChatMessage]]()
3131
private val privateMessageHandler = ListBuffer[Consumer[TwitchChatMessage]]()
3232

33-
override def init(): Boolean = {
34-
35-
// Add the own message handler to the twitch connector
36-
if (sourceConnector.isDefined) {
37-
sourceConnector.get.addMessageEventListener(onMessage)
38-
sourceConnector.get.addUnknownEventListener(onUnknown)
39-
sourceConnector.get.init()
40-
} else {
41-
logger warn "Source connector not set."
42-
false
43-
}
33+
override def start(): Boolean = {
34+
sourceConnector.get.addMessageEventListener(onMessage)
35+
sourceConnector.get.addUnknownEventListener(onUnknown)
36+
true
4437
}
4538

4639
private def onMessage(event: MessageEvent): Unit = {
@@ -101,9 +94,4 @@ class TwitchChatInputImpl extends Connection[chat.TwitchChatConnector] with Twit
10194

10295
override def setChannel(channel: String): Unit = sourceConnector.get.setChannel(channel)
10396

104-
override def serialize(): String = getSourceIdentifier
105-
106-
override def deserialize(value: String): Unit = {
107-
setSourceConnector(value)
108-
}
10997
}

src/main/scala/org/codeoverflow/chatoverflow/requirement/service/twitch/chat/impl/TwitchChatOutputImpl.scala

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,16 @@ package org.codeoverflow.chatoverflow.requirement.service.twitch.chat.impl
33
import org.codeoverflow.chatoverflow.WithLogger
44
import org.codeoverflow.chatoverflow.api.io.output.chat.TwitchChatOutput
55
import org.codeoverflow.chatoverflow.registry.Impl
6-
import org.codeoverflow.chatoverflow.requirement.Connection
6+
import org.codeoverflow.chatoverflow.requirement.OutputImpl
77
import org.codeoverflow.chatoverflow.requirement.service.twitch.chat
88

99
/**
1010
* This is the implementation of the twitch chat output, using the twitch connector.
1111
*/
1212
@Impl(impl = classOf[TwitchChatOutput], connector = classOf[chat.TwitchChatConnector])
13-
class TwitchChatOutputImpl extends Connection[chat.TwitchChatConnector] with TwitchChatOutput with WithLogger {
13+
class TwitchChatOutputImpl extends OutputImpl[chat.TwitchChatConnector] with TwitchChatOutput with WithLogger {
1414

1515
override def sendChatMessage(message: String): Unit = sourceConnector.get.sendChatMessage(message)
1616

17-
override def init(): Boolean = {
18-
if (sourceConnector.isDefined) {
19-
sourceConnector.get.init()
20-
} else {
21-
logger warn "Source Connector not set."
22-
false
23-
}
24-
}
25-
26-
override def serialize(): String = getSourceIdentifier
27-
28-
override def deserialize(value: String): Unit = {
29-
setSourceConnector(value)
30-
}
17+
override def start(): Boolean = true
3118
}

0 commit comments

Comments
 (0)