Skip to content

Commit

Permalink
Rooms
Browse files Browse the repository at this point in the history
  • Loading branch information
thalysmarciobn committed Sep 10, 2023
1 parent 0911f24 commit b7711b9
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 4 deletions.
4 changes: 4 additions & 0 deletions src/examples/java/MMOServer.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
import mmo.core.netty.NettyBootstrap;
import mmo.world.RoomManager;
import network.NetworkFactory;

import java.time.Duration;
import java.util.Objects;

public class MMOServer {

public static void main(String[] args) {
Objects.requireNonNull(RoomManager.Companion.getInstance()).addRoom("test");

NettyBootstrap bootstrap = new NettyBootstrap(new NetworkFactory(), 10000, Duration.ofSeconds(10));
bootstrap.build();
}
Expand Down
1 change: 0 additions & 1 deletion src/examples/java/network/NetworkSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ public NetworkSession(ChannelAdapter channel) {

@Override
public void close() {

}

@Override
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/mmo/core/netty/NettyBootstrap.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package mmo.core.netty

import io.netty.bootstrap.ServerBootstrap
import io.netty.buffer.Unpooled
import io.netty.channel.Channel
import io.netty.channel.ChannelHandlerContext
import io.netty.channel.ChannelInitializer
import io.netty.channel.EventLoopGroup
import io.netty.channel.nio.NioEventLoopGroup
import io.netty.channel.socket.nio.NioServerSocketChannel
import io.netty.handler.codec.DelimiterBasedFrameDecoder
import io.netty.handler.timeout.IdleStateEvent
import io.netty.handler.timeout.IdleStateHandler
import mmo.core.Server
Expand Down Expand Up @@ -55,7 +53,7 @@ class NettyBootstrap<S : Session?>(private val factory: SessionFactory<S>, priva
channel!!.closeFuture()
}

override fun sessions(): Collection<S>? {
override fun sessions(): Collection<S> {
return sessionHandlerAdapter!!.sessions()
}
}
11 changes: 11 additions & 0 deletions src/main/java/mmo/world/Room.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package mmo.world

import io.netty.channel.ChannelId
import mmo.core.session.Session
import java.util.concurrent.ConcurrentHashMap

class Room(@JvmField var name: String) {
var max: Int = -1

var users: ConcurrentHashMap<ChannelId, Session> = ConcurrentHashMap()
}
9 changes: 9 additions & 0 deletions src/main/java/mmo/world/RoomCode.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package mmo.world

enum class RoomCode {
Exists,
NotExists,
Full,
Fail,
Ok
}
43 changes: 43 additions & 0 deletions src/main/java/mmo/world/RoomManager.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package mmo.world

import org.apache.logging.log4j.LogManager
import java.util.concurrent.ConcurrentHashMap

class RoomManager {
private var rooms: ConcurrentHashMap<String, Room>? = null

private val logger = LogManager.getLogger(javaClass)

fun addRoom(name: String): RoomCode {
return if (rooms!!.containsKey(name)) RoomCode.Exists else try {
val room = Room(name)
rooms!![name] = room
logger.info("new room: {}", name)
RoomCode.Ok
} catch (ex: Exception) {
RoomCode.Fail
}
}

fun removeRoom(room: Room): RoomCode {
if (!rooms!!.containsKey(room.name)) return RoomCode.NotExists
return if (rooms!!.remove(room.name, room)) RoomCode.Ok else RoomCode.Fail
}

companion object {
var instance: RoomManager? = null
get() {
if (field == null) {
field = build()
}
return field
}
private set

private fun build(): RoomManager {
val roomManager = RoomManager()
roomManager.rooms = ConcurrentHashMap()
return roomManager
}
}
}

0 comments on commit b7711b9

Please sign in to comment.