From 8c959ec81844b7bafdfe68ee5cd7b14e24e315d4 Mon Sep 17 00:00:00 2001 From: SeekDaSky Date: Mon, 4 Dec 2017 14:13:20 +0100 Subject: [PATCH] =?UTF-8?q?premi=C3=A8re=20version=20du=20chat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + lib/org.json.jar | Bin 0 -> 64952 bytes ndli1718.iml | 13 ++++++ src/Channel.kt | 95 +++++++++++++++++++++++++++++++++++++++ src/ChannelDispatcher.kt | 43 ++++++++++++++++++ src/META-INF/MANIFEST.MF | 3 ++ src/Main.kt | 11 +++++ src/Stack.kt | 55 +++++++++++++++++++++++ 8 files changed, 222 insertions(+) create mode 100644 .gitignore create mode 100644 lib/org.json.jar create mode 100644 ndli1718.iml create mode 100644 src/Channel.kt create mode 100644 src/ChannelDispatcher.kt create mode 100644 src/META-INF/MANIFEST.MF create mode 100644 src/Main.kt create mode 100644 src/Stack.kt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9fb18b4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +out diff --git a/lib/org.json.jar b/lib/org.json.jar new file mode 100644 index 0000000000000000000000000000000000000000..40a325dbadf46a178fb60a8251c796dacf1f66be GIT binary patch literal 64952 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 ea6b`$tv!_Gpn*yz7#IWaj{v9=g + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Channel.kt b/src/Channel.kt new file mode 100644 index 0000000..f856630 --- /dev/null +++ b/src/Channel.kt @@ -0,0 +1,95 @@ +import org.json.JSONArray +import org.json.JSONObject +import seekdasky.kWebSocket.Client +import seekdasky.kWebSocket.Event +import seekdasky.kWebSocket.Listeners.AsynchronousListener +import seekdasky.kWebSocket.Message.*; + +class Channel : AsynchronousListener { + + val channelName : String; + var clients : MutableList; + val messages : Stack>; + var lock = false; + + constructor(chanName : String){ + this.channelName = chanName; + this.clients = mutableListOf(); + this.messages = Stack(mutableListOf()); + } + + override fun filter(c: Client): Boolean { + return this.channelName == c.URL; + } + + override fun processClosed(e: Event) { + System.out.println("Client left the channel: "+this.channelName) + this.clients.remove(e.client); + } + + override fun processConnection(c: Client) { + this.clients.add(c); + c.data["IsLogged"] = false; + } + + override fun processEvent(e: Event) { + var json = JSONObject(e.message.getString()) + if(e.client.data["IsLogged"] != true){ + //json format : {username:xxx} + if(json.getString("name") != null){ + e.client.data["IsLogged"] = true; + e.client.data["Username"] = json.getString("name"); + + json = JSONObject(); + json.put("success",true); + json.put("error",""); + e.client.send(buildTextMessage(json.toString())); + + val array = JSONArray(); + synchronized(this.lock,{ + this.messages.forEach { + array.put(JSONArray(listOf(it.first.data["Username"],it.second))) + } + }) + + json = JSONObject(); + json.put("error",false); + json.put("msg",array); + e.client.send(buildTextMessage(json.toString())); + + }else{ + //tried to access chat without logging in + json = JSONObject(""); + json.put("success",false); + json.put("error","You must send your credential before sending anything else"); + e.client.send(buildTextMessage(json.toString())); + } + + return; + } + + if(json.has("message")){ + synchronized(this.lock,{ + this.lock = true; + this.messages.push(Pair(e.client,json.getString("message"))) + if(this.messages.count() > 20){ + this.messages.pop(); + } + }); + + val array = JSONArray(); + array.put(JSONArray(listOf(e.client.data["Username"],json.getString("message")))) + + json = JSONObject(); + json.put("error",false); + json.put("msg",array); + for(c in this.clients){ + if(c != e.client && c.data["IsLogged"] == true){ + c.send(buildTextMessage(json.toString())); + } + } + }else{ + System.out.println("unknown JSON: "+json.toString()); + } + } +} \ No newline at end of file diff --git a/src/ChannelDispatcher.kt b/src/ChannelDispatcher.kt new file mode 100644 index 0000000..d48d915 --- /dev/null +++ b/src/ChannelDispatcher.kt @@ -0,0 +1,43 @@ +import seekdasky.kWebSocket.Client +import seekdasky.kWebSocket.Event +import seekdasky.kWebSocket.Listeners.AsynchronousListener +import seekdasky.kWebSocket.Server + +class ChannelDispatcher : AsynchronousListener{ + + val serv : Server; + private var channels : MutableList; + + constructor(serv : Server){ + this.serv = serv; + this.channels = mutableListOf(); + } + + override fun filter(c: Client): Boolean { + for(chan in this.channels){ + if(chan.channelName == c.URL){ + return false; + } + } + + return true; + } + + override fun processClosed(e: Event) { + //no client should arrive here + } + + override fun processConnection(c: Client) { + System.out.println("new channel created: "+c.URL); + //if a client is handled here it means we have no channel at this address, let's create it + var newChan = Channel(c.URL); + this.serv.addListener(newChan); + //we transfer the client to the new channel + newChan.processConnection(c); + this.channels.add(newChan); + } + + override fun processEvent(e: Event) { + //no client should arrive here + } +} \ No newline at end of file diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF new file mode 100644 index 0000000..da202ef --- /dev/null +++ b/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: MainKt + diff --git a/src/Main.kt b/src/Main.kt new file mode 100644 index 0000000..c3546d0 --- /dev/null +++ b/src/Main.kt @@ -0,0 +1,11 @@ +import seekdasky.kWebSocket.Server + + +fun main(args: Array){ + val server = Server("0.0.0.0",9999,null); + + server.addListener(ChannelDispatcher(server)); + server.startServer(); + + server.block(); +} \ No newline at end of file diff --git a/src/Stack.kt b/src/Stack.kt new file mode 100644 index 0000000..e30d60b --- /dev/null +++ b/src/Stack.kt @@ -0,0 +1,55 @@ +class Stack(list:MutableList):Iterator { + + var itCounter: Int = 0 + + var items: MutableList = list + + + fun isEmpty():Boolean = this.items.isEmpty() + + fun count():Int = this.items.count() + + fun push(element:T) { + val position = this.count() + this.items.add(position, element) + } + + override fun toString() = this.items.toString() + + fun pop():T? { + if (this.isEmpty()) { + return null + } else { + val item = this.items.count() - 1 + return this.items.removeAt(item) + } + } + + fun peek():T? { + if (isEmpty()) { + return null + } else { + return this.items[this.items.count() - 1] + } + } + + override fun hasNext(): Boolean { + val hasNext = itCounter < count() + + // As soon as condition fails, reset the counter + if (!hasNext) itCounter = 0 + + return hasNext + } + + override fun next(): T { + if (hasNext()) { + val topPos: Int = (count() - 1) - itCounter + itCounter++ + return this.items[topPos] + } else { + throw NoSuchElementException("No such element") + } + } + +} \ No newline at end of file