From a6dd6752c1eca16dee7ae53980ec3f4673dfcd1d Mon Sep 17 00:00:00 2001 From: brausjonas Date: Sat, 28 Jan 2023 23:41:15 +0100 Subject: [PATCH] Some bug fix --- .../.idea.FlufflParty/.idea/workspace.xml | 4 +- .../Assets/Scripts/Start/StartHandler.cs | 27 ++++---- .../UserSettings/EditorUserSettings.asset | 4 +- .../UserSettings/Layouts/default-2021.dwlt | 50 +++++++------- Server/.idea/workspace.xml | 5 +- Server/out/artifacts/Server_jar/Server.jar | Bin 8032 -> 9798 bytes Server/out/production/Server/Room$1.class | Bin 2420 -> 1184 bytes Server/out/production/Server/Room$2.class | Bin 0 -> 2530 bytes Server/out/production/Server/Room.class | Bin 3815 -> 4634 bytes Server/out/production/Server/Server$1.class | Bin 2652 -> 2696 bytes Server/out/production/Server/Server.class | Bin 2520 -> 3344 bytes Server/src/Room.java | 65 ++++++++++++++---- Server/src/Server.java | 28 ++++++-- 13 files changed, 123 insertions(+), 60 deletions(-) create mode 100644 Server/out/production/Server/Room$2.class diff --git a/FlufflParty/.idea/.idea.FlufflParty/.idea/workspace.xml b/FlufflParty/.idea/.idea.FlufflParty/.idea/workspace.xml index 1efed9a..6d5d029 100644 --- a/FlufflParty/.idea/.idea.FlufflParty/.idea/workspace.xml +++ b/FlufflParty/.idea/.idea.FlufflParty/.idea/workspace.xml @@ -46,7 +46,7 @@ } - diff --git a/FlufflParty/Assets/Scripts/Start/StartHandler.cs b/FlufflParty/Assets/Scripts/Start/StartHandler.cs index 796b22a..7f0f3c3 100644 --- a/FlufflParty/Assets/Scripts/Start/StartHandler.cs +++ b/FlufflParty/Assets/Scripts/Start/StartHandler.cs @@ -19,11 +19,9 @@ public class StartHandler : MonoBehaviour private void Start() { - client = new TcpClient("185.245.96.48", 8051); - layout1.SetActive(true); layout2.SetActive(false); - + client = new TcpClient("185.245.96.48", 8051); buttonJoin.SetActive(false); } @@ -31,24 +29,24 @@ public class StartHandler : MonoBehaviour { Stream stream = client.GetStream(); byte[] readMessage = new byte[10]; - + //Send message new room - stream.Write(new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - + stream.Write(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); + layout1.SetActive(false); layout2.SetActive(true); - + //wait for room code int i = stream.Read(readMessage, 0, 10); - + Debug.Log(i); string code = Encoding.ASCII.GetString(readMessage); - + PlayerPrefs.SetString("roomcode", code); roomcode = code; PlayerPrefs.Save(); - + layout2.GetComponentInChildren().text = "Your room code is: \n" + code; } @@ -58,7 +56,7 @@ public class StartHandler : MonoBehaviour roomcode = code; PlayerPrefs.SetString("roomcode", code); PlayerPrefs.Save(); - + SceneManager.LoadScene(1, LoadSceneMode.Single); client.Close(); } @@ -67,15 +65,14 @@ public class StartHandler : MonoBehaviour { PlayerPrefs.SetString("roomcode", roomcode); PlayerPrefs.Save(); - + SceneManager.LoadScene(1, LoadSceneMode.Single); client.Close(); } public void ButtonBack() { - layout1.SetActive(true); - layout2.SetActive(false); + SceneManager.LoadScene(0, LoadSceneMode.Single); } public void ButtonCopy() @@ -94,4 +91,4 @@ public class StartHandler : MonoBehaviour buttonJoin.SetActive(false); } } -} +} \ No newline at end of file diff --git a/FlufflParty/UserSettings/EditorUserSettings.asset b/FlufflParty/UserSettings/EditorUserSettings.asset index 14d6805..2bb28f9 100644 --- a/FlufflParty/UserSettings/EditorUserSettings.asset +++ b/FlufflParty/UserSettings/EditorUserSettings.asset @@ -9,10 +9,10 @@ EditorUserSettings: value: 5604555501510a0955590d74437008441216412e7578276829704a6bb0b66c3a flags: 0 RecentlyUsedSceneGuid-1: - value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a + value: 0000025f04075d0f0c0a5c7149205a4417154f782e7923357e7a4560e3b4653b flags: 0 RecentlyUsedSceneGuid-2: - value: 0000025f04075d0f0c0a5c7149205a4417154f782e7923357e7a4560e3b4653b + value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a flags: 0 UnityRemoteDevice: value: 225f4d46245b0d4902070862342649191512 diff --git a/FlufflParty/UserSettings/Layouts/default-2021.dwlt b/FlufflParty/UserSettings/Layouts/default-2021.dwlt index 5cdef4a..2962fed 100644 --- a/FlufflParty/UserSettings/Layouts/default-2021.dwlt +++ b/FlufflParty/UserSettings/Layouts/default-2021.dwlt @@ -19,7 +19,7 @@ MonoBehaviour: width: 1920 height: 1117 m_ShowMode: 4 - m_Title: Game + m_Title: Inspector m_RootView: {fileID: 6} m_MinSize: {x: 875, y: 300} m_MaxSize: {x: 10000, y: 10000} @@ -48,7 +48,7 @@ MonoBehaviour: m_MinSize: {x: 300, y: 200} m_MaxSize: {x: 24288, y: 16192} vertical: 0 - controlID: 78 + controlID: 71 --- !u!114 &3 MonoBehaviour: m_ObjectHideFlags: 52 @@ -94,8 +94,8 @@ MonoBehaviour: y: 0 width: 343 height: 686 - m_MinSize: {x: 200, y: 200} - m_MaxSize: {x: 4000, y: 4000} + m_MinSize: {x: 201, y: 221} + m_MaxSize: {x: 4001, y: 4021} m_ActualView: {fileID: 17} m_Panes: - {fileID: 17} @@ -223,7 +223,7 @@ MonoBehaviour: m_MinSize: {x: 200, y: 200} m_MaxSize: {x: 16192, y: 16192} vertical: 1 - controlID: 557 + controlID: 103 --- !u!114 &10 MonoBehaviour: m_ObjectHideFlags: 52 @@ -248,7 +248,7 @@ MonoBehaviour: m_MinSize: {x: 200, y: 100} m_MaxSize: {x: 16192, y: 8096} vertical: 0 - controlID: 55 + controlID: 104 --- !u!114 &11 MonoBehaviour: m_ObjectHideFlags: 52 @@ -670,14 +670,14 @@ MonoBehaviour: m_OverrideSceneCullingMask: 6917529027641081856 m_SceneIsLit: 1 m_SceneLighting: 1 - m_2DMode: 1 + m_2DMode: 0 m_isRotationLocked: 0 m_PlayAudio: 0 m_AudioPlay: 0 m_Position: - m_Target: {x: 977.5928, y: 457.28116, z: 33874.965} + m_Target: {x: 97.37118, y: -10.844384, z: 113.38515} speed: 2 - m_Value: {x: 977.5928, y: 457.28116, z: 33874.965} + m_Value: {x: 97.37118, y: -10.844384, z: 113.38515} m_RenderMode: 0 m_CameraMode: drawMode: 0 @@ -724,17 +724,17 @@ MonoBehaviour: m_GridAxis: 1 m_gridOpacity: 0.5 m_Rotation: - m_Target: {x: 0, y: 0, z: 0, w: 1} + m_Target: {x: -0.079544604, y: -0.90466255, z: 0.37537217, w: -0.18539767} speed: 2 - m_Value: {x: 0, y: 0, z: 0, w: 1} + m_Value: {x: -0.07954388, y: -0.9046543, z: 0.37536877, w: -0.18539599} m_Size: - m_Target: 709.59906 + m_Target: 18.768896 speed: 2 - m_Value: 709.59906 + m_Value: 18.768896 m_Ortho: - m_Target: 1 + m_Target: 0 speed: 2 - m_Value: 1 + m_Value: 0 m_CameraSettings: m_Speed: 1.005 m_SpeedNormalized: 0.5 @@ -748,7 +748,7 @@ MonoBehaviour: m_FarClip: 10000 m_DynamicClip: 1 m_OcclusionCulling: 0 - m_LastSceneViewRotation: {x: -0.44589415, y: 0.51905, z: -0.27737507, w: -0.6744397} + m_LastSceneViewRotation: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226} m_LastSceneViewOrtho: 0 m_ReplacementShader: {fileID: 0} m_ReplacementString: @@ -796,22 +796,22 @@ MonoBehaviour: m_SkipHidden: 0 m_SearchArea: 1 m_Folders: - - Assets/Scenes + - Assets/Scripts/Start m_Globs: [] m_OriginalText: m_ViewMode: 1 m_StartGridSize: 64 m_LastFolders: - - Assets/Scenes + - Assets/Scripts/Start m_LastFoldersGridSize: -1 m_LastProjectPath: F:\Projects\Unity\flufflparty\FlufflParty m_LockTracker: m_IsLocked: 0 m_FolderTreeState: scrollPos: {x: 0, y: 0} - m_SelectedIDs: ae5d0000 - m_LastClickedID: 23982 - m_ExpandedIDs: 00000000285d00002a5d00002c5d00009e5d000000ca9a3b + m_SelectedIDs: 985d0000 + m_LastClickedID: 23960 + m_ExpandedIDs: 000000003c5d00003e5d0000405d000000ca9a3b m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -839,7 +839,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 00000000285d00002a5d00002c5d0000 + m_ExpandedIDs: 000000003c5d00003e5d0000405d0000 m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: @@ -915,8 +915,8 @@ MonoBehaviour: m_Tooltip: m_Pos: serializedVersion: 2 - x: 1447 - y: 73 + x: -30553 + y: -31970 width: 472 height: 1046 m_ViewDataDictionary: {fileID: 0} @@ -969,7 +969,7 @@ MonoBehaviour: scrollPos: {x: 0, y: 0} m_SelectedIDs: m_LastClickedID: 0 - m_ExpandedIDs: 1831ffff6831ffff4a38ffff5a38ffff843affffd23affffb441ffffc441ffff4850ffff9650ffff7857ffff8857ffffa859fffff859ffffda60ffffea60ffff4e63ffff2868ffff8268ffff4a6fffff666fffff8080ffff2c83ffff8283ffff648affff748affff928cffffe88cffffca93ffffda93ffffe095ffff3696ffff189dffff289dfffff89effff4e9fffff30a6ffff40a6ffffe4d5ffff04fbffff345c0000605c0000965c00009c5c000058a6000036bc000048bc000064bc00007ebc0000aabc0000b4bc0000c4bc0000 + m_ExpandedIDs: 78ddffffc8ddffffaae4ffffbae4ffff82e6ffffd2e6ffffb4edffffc4edffff9aefffffeaefffffccf6ffffdcf6ffff06fbffff m_RenameOverlay: m_UserAcceptedRename: 0 m_Name: diff --git a/Server/.idea/workspace.xml b/Server/.idea/workspace.xml index 79856f3..7fe325e 100644 --- a/Server/.idea/workspace.xml +++ b/Server/.idea/workspace.xml @@ -72,7 +72,10 @@ 1674839030210 - + + + + diff --git a/Server/out/artifacts/Server_jar/Server.jar b/Server/out/artifacts/Server_jar/Server.jar index 0e8e6dc75b2bb6fe814306cb9d14b0b1d5110dda..aaa1b77a771244d3efc0c4bfc2237ba24e40695f 100644 GIT binary patch delta 8182 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 TXaoezzeV*g>D*!br}zH=xX(Zf delta 6387 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 literal 3815 zcmb_eYjhN68GgQ<*`3|Z(1ZjCmyJzpipdh15GW#{5t24FHe3^_N$6$R3@~BYjkB|q zv{(v7Ed?)?YA^JX(rW(bQIrI0gj#!!c<@K{_{Zbrhkrf(@^}tjIOy}vWG{ut!GnQ$ zzi+FSR!09b{I7#cAw!WOYh#BLFLL^yFYVZ^{*1L-(oGTkTZ8NKtT zfZllph@%2oz4J$W?PA0jM)5fVZX7iji6SSX7e!vi{URQZ;{e7CJYnF;I1)G*#}a&A z#8VYGgr{SO;&6;XkBE3i#L+mufG-;OQXEV1tbt<&o>MS;G8xGCtJ1-A;K~cO|t^H=Etpl^wPfs(VMQ{Z>ob z%It3G^IRvhoBBx3cK6#Z4SW0i8P^PNk84}Q3{@4lpBAGWMqYzMZz)Z|zL`$z@Ykdb{O1@;520kaN-V32mPOVSHo8aj3yXT6bL9kz_hs{L%I
qoLA)o{HuOudP(;%iK!K9~2;Wmi6(9;>%< z^#PTA{qrWij*|vnF!2q1lQk*r5YUHsCB23f0_8;!FPV55TMfKo;uKyr@fuz?@dn0C zyeZ-|#tpn>;%$73u>5czCY*_HOBwWlIb|De-Z{dS=Z1~l-QB{cGF{(T&a;JR**q;u zMBc(Hz+;cumh?u%8XdJW!wSo1X~CxJ2r*MVIwl%>ZlsQS*`SXV<~3e#$N@|r9$CLoK(%ix;eK^5DZ23ZakYgFpB zxY+pjS)R4oUo93*9bo5o^BLpw1o=`pvukaM<8jyV$oO#MP^aLk^z-v?hkn;e*|>ur zohE)>41|RCoP~tO{>X;#M|OulvQ?mPk3U~cJ9daaXU}k~pl&VNDcAAs&y1*XJeWKO zBN;xA=p@3)X~YK3AwCI})Fu%Tp(mG3LQ5LwQ85WKc^0NNjf#QlIcD{3=TO-vE4sf@ zRkji?*vu{1L<%;+O7kQ_XMA+`Qm)1v$_3E*RW(tGTFm7avWD5$^2@i7`7XwKekr$c zbr^NnkK6Gi>d`^3`XCQ{k{0rJP%a8)DKn`|i1Q8T4D!~NBEo-AztZka5PJB+X^hC2 zXuF6Zf3mDEIdB#c{V^8c2dJJ#4NEewdj1p^P_J>QuBAv!Vc`@OO=0mgmJCcIF~CaJ zox?{qEuX^ev{cLAL461hO(1qOq$d7-l4}v!;ljA;FYW#pt)tFgJ&oTd>c+8GUJ`9* zaYt4BC(!{-?;p_lgt=_iarw^U&-V{V9RKa3@@5p?8ssfnM^P2gC=3x%5izZQ3U^Jw zU8^tBr|_`}?3raBTK=E*iO=kFRAc6M`uWe54L3Gl=+IW{^YyyZc%XT{-nKTpC|t}n z%v=QnAHgs1ee|;?b5v*OcP0?s*vy2^kOeQ}Z@7%5N~s;{QI4*p2qaFUT;{p`;WRvFSQCA zne7@>UZKms;QSNeE109MAg(UUui8zq%XpYWgbMz@inxKzO8p%@om|!FzXe-^o>8w6 zkL)4b2x}#3Rvr3Z&T9gCuLRI_EPXgYxlc}U&`c?!T-AV0wFR# zeSY%(Y=}*wScV;Vc$P9~H&=#7@aQbgp__Al4Av~p>L#3-%ufH9Qb=-)GfaXb|Na9> CEgn1o diff --git a/Server/out/production/Server/Server$1.class b/Server/out/production/Server/Server$1.class index a8b1a60dd14429e486aa3dfef87a52d9e0202d60..e4130fe9fe7aada52ad912b05a2228fbf512fdc0 100644 GIT binary patch delta 993 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 delta 1309 zcma)*+jCP@6vlrim+s{B(6mXLN=ZwgQkkSSsI{#qP;M18Xr*XLk=7U^4Wvy?(-yo1 z6fbx|>QTHr@>0hqQB2S}jJ`6yFuwR7_$N5SsJQk?MtyKblbN;mUVE+eed}BMT@*G7U^BWZ<#ezvEizX44v^l9bWwL?iOP@dcU#=cfWu`fM8eIPw&QRcLP=U|~QV{wKdi&r?Uc-7)8 zuh}=JZhDvV27%rATz0k; zUCNcFqx(mriuWuou&j9B!seWP-P5;akPkGm4=r|Tb|HsdK0SLZvG-&qJ6FmTW-Tr< zr1;3cORNgnv|$mjxcx?fI~L_ix4I9UeU*sgQLx9Fh2KzPg@8l^g3V$ov{VRQmI^L3YEbY*_MiZUXs1;OwmHyY36S!2XuaFPuz(v{ zpE`-3XmFw?W2=NxE$ip2w0=#SUw>ZGLKJ?wQVPS%?nDN8XwuJEtyR6Hmx$t$h5__?&G=Q7-Ee&BE$Ky=m5v z5xKKvHj@)o(=y(fzep<~{SXg33J=$*dgXQpNg+2PMVj#Zj#3;jqJf)un|(aOqjlm5 zS+#85SQWQMug$x`arzyQ+UxQ%TGr1?vL6!xYtQTN>?^qbBfFkF#-V>nHvUI4Yh5xm Q&F~5OWHqHur>ye(6Gf@a+W-In diff --git a/Server/src/Room.java b/Server/src/Room.java index 68f38ae..c31bdc4 100644 --- a/Server/src/Room.java +++ b/Server/src/Room.java @@ -4,6 +4,8 @@ import java.io.IOException; import java.net.ServerSocket; import java.util.ArrayList; import java.util.List; +import java.util.Timer; +import java.util.TimerTask; public class Room { @@ -18,8 +20,13 @@ public class Room private int currentPlayer = 0; + private long timeOut = 0; + private Timer t; + public Room(String roomCode, Server server) { + timeOut = System.currentTimeMillis(); + this.roomCode = roomCode; startPositions = new Vector3[4]; @@ -29,10 +36,31 @@ public class Room startPositions[3] = new Vector3(92, 1, 128); this.server = server; + + try + { + t = new Timer(); + TimerTask tt = new TimerTask() + { + @Override + public void run() + { + if(System.currentTimeMillis() - timeOut > 600000) + { + System.out.println("[" + Server.getDateTime() + "] Room " + roomCode + " closed due to timeout!"); + server.deleteRoom(roomCode); + } + } + }; + + t.scheduleAtFixedRate(tt, 0, 60000); + }catch(Exception e){} } public void addClient(Client client) { + timeOut = System.currentTimeMillis(); + for (int i = 0; i < players.length; i++) { if (players[i] == null) @@ -40,7 +68,7 @@ public class Room players[i] = client; playerCount++; - System.out.println("Client joined room " + roomCode + " successfully as player " + i); + System.out.println("[" + Server.getDateTime() + "] Client joined room " + roomCode + " successfully as player " + i); Thread t = new Thread(new Runnable() { @@ -66,6 +94,8 @@ public class Room input.read(readData); + timeOut = System.currentTimeMillis(); + switch (readData[0]) { @@ -183,39 +213,50 @@ public class Room public void closeRoom() { + t.cancel(); + try { - players[0].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); + if(players[0] != null) + { + players[0].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); + } - } catch (IOException ex) + } catch (Exception ex) { } try { + if(players[1] != null) + { + players[1].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); + } - players[1].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - - } catch (IOException ex) + } catch (Exception ex) { } try { + if(players[2] != null) + { + players[2].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); + } - players[2].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - - } catch (IOException ex) + } catch (Exception ex) { } try { + if(players[3] != null) + { + players[3].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); + } - players[3].output.write(new byte[]{127, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - - } catch (IOException ex) + } catch (Exception ex) { } } diff --git a/Server/src/Server.java b/Server/src/Server.java index 750c01d..6fc11b7 100644 --- a/Server/src/Server.java +++ b/Server/src/Server.java @@ -4,6 +4,8 @@ import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.HashMap; public class Server @@ -13,26 +15,36 @@ public class Server private final Server server = this; + private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); + + public static String getDateTime() + { + return dtf.format(LocalDateTime.now()); + } + public void deleteRoom(String code) { rooms.get(code).closeRoom(); rooms.remove(code); - System.out.println("Room " + code + " successfully deleted"); + + + System.out.println("[" + getDateTime() + "] Room" + code + " successfully deleted"); } public void start() { + try { serverSocket = new ServerSocket(8051); - System.out.println("Server started! IP 185.245.96.48 PORT 8051"); + System.out.println("[" + getDateTime() + "] Server started! IP 185.245.96.48 PORT 8051"); while(true) { Socket tempClient = serverSocket.accept(); - System.out.println("Client with IP " + tempClient.getInetAddress().getHostName() + " connected!"); + System.out.println("[" + getDateTime() + "] Client with IP " + tempClient.getInetAddress().getHostName() + " connected!"); new Thread(new Runnable() { @@ -58,7 +70,7 @@ public class Server Room room = new Room(new String(code, StandardCharsets.US_ASCII), server); rooms.put(new String(code, StandardCharsets.US_ASCII), room); - System.out.println("Room " + new String(code, StandardCharsets.US_ASCII) + " successfully created!"); + System.out.println("[" + getDateTime() + "] Room " + new String(code, StandardCharsets.US_ASCII) + " successfully created!"); break; case 1: @@ -106,6 +118,14 @@ public class Server } } + String roomCode = new String(code, StandardCharsets.US_ASCII); + + //avoide double codes (just in case^^) + if(rooms.containsKey(roomCode)) + { + code = generateRoomCode(); + } + return code; } }