Browse Source

Logging in works

Josh_Dev_branch
Joshua Reason 5 years ago
parent
commit
9e5e19a712
26 changed files with 677 additions and 12 deletions
  1. +1
    -1
      Assets/Data/Networking/Client.meta
  2. +1
    -1
      Assets/Data/Networking/Client/Realtime.meta
  3. +3
    -0
      Assets/Data/Networking/Client/Realtime/LocalClient.asset
  4. +8
    -0
      Assets/Data/Networking/Client/Realtime/LocalClient.asset.meta
  5. +0
    -3
      Assets/Data/Networking/Realtime/Clients.asset
  6. +8
    -0
      Assets/Data/Networking/Server.meta
  7. +0
    -0
      Assets/Data/Networking/Server/Realtime.meta
  8. +3
    -0
      Assets/Data/Networking/Server/Realtime/Clients.asset
  9. +0
    -0
      Assets/Data/Networking/Server/Realtime/Clients.asset.meta
  10. +3
    -0
      Assets/Data/Networking/Server/Realtime/Server.asset
  11. +8
    -0
      Assets/Data/Networking/Server/Realtime/Server.asset.meta
  12. +313
    -0
      Assets/Scenes/Networking Test Scenes/ClientScene.unity
  13. +7
    -0
      Assets/Scenes/Networking Test Scenes/ClientScene.unity.meta
  14. +3
    -1
      Assets/Scenes/Networking Test Scenes/ServerScene.unity
  15. +1
    -1
      Assets/Scripts/Networking/Client.meta
  16. +99
    -0
      Assets/Scripts/Networking/Client/ClientManager.cs
  17. +11
    -0
      Assets/Scripts/Networking/Client/ClientManager.cs.meta
  18. +61
    -0
      Assets/Scripts/Networking/Client/ClientObject.cs
  19. +11
    -0
      Assets/Scripts/Networking/Client/ClientObject.cs.meta
  20. +4
    -0
      Assets/Scripts/Networking/Core/Protocols/LoginProtocols.cs
  21. +8
    -0
      Assets/Scripts/Networking/Core/Utility.meta
  22. +36
    -0
      Assets/Scripts/Networking/Core/Utility/ExtensionMethods.cs
  23. +11
    -0
      Assets/Scripts/Networking/Core/Utility/ExtensionMethods.cs.meta
  24. +59
    -2
      Assets/Scripts/Networking/Server/ClientData.cs
  25. +11
    -0
      Assets/Scripts/Networking/Server/ServerManager.cs
  26. +7
    -3
      Assets/Scripts/Networking/Server/ServerObject.cs

Assets/Scripts/LogicBlocks.meta → Assets/Data/Networking/Client.meta View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8936b441d7647f74884c94f97bfb8931
guid: 19c3c4c3469ea8848bc1d570031bc6f4
folderAsset: yes
DefaultImporter:
externalObjects: {}

Assets/Models.meta → Assets/Data/Networking/Client/Realtime.meta View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 296bd90e667df1f4697823a0aa45acf0
guid: a37e070e66567414eb2896eae1a48654
folderAsset: yes
DefaultImporter:
externalObjects: {}

+ 3
- 0
Assets/Data/Networking/Client/Realtime/LocalClient.asset View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ad7752f6b5730c6ed1ab7968fd3c21e9a6eb684ace7328c43b9cad1d690d5096
size 479

+ 8
- 0
Assets/Data/Networking/Client/Realtime/LocalClient.asset.meta View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8dca4719b56d91143b236583a436c911
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

+ 0
- 3
Assets/Data/Networking/Realtime/Clients.asset View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:df98d400e1ed97cfd80f5dc44fca4562a4a6dd85f7dd47e9f39b8599ec425963
size 423

+ 8
- 0
Assets/Data/Networking/Server.meta View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 15c1e20c06f5124418a8add327ab1475
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Assets/Data/Networking/Realtime.meta → Assets/Data/Networking/Server/Realtime.meta View File


+ 3
- 0
Assets/Data/Networking/Server/Realtime/Clients.asset View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0a9810d89ee914d74c6ef7b34d27893d6d5d4389c9f18abbabf5201e41d585de
size 440

Assets/Data/Networking/Realtime/Clients.asset.meta → Assets/Data/Networking/Server/Realtime/Clients.asset.meta View File


+ 3
- 0
Assets/Data/Networking/Server/Realtime/Server.asset View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1d8f9477fd04a5984630bcb6b57ce3b9ecc55b844123eac3ce7ed198b0b3d3a5
size 489

+ 8
- 0
Assets/Data/Networking/Server/Realtime/Server.asset.meta View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: aba6c842adfc9904dba334cb48257361
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

+ 313
- 0
Assets/Scenes/Networking Test Scenes/ClientScene.unity View File

@ -0,0 +1,313 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 10
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringMode: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &631914030
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 631914032}
- component: {fileID: 631914031}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &631914031
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 631914030}
m_Enabled: 1
serializedVersion: 8
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &631914032
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 631914030}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &875866895
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 875866898}
- component: {fileID: 875866897}
- component: {fileID: 875866896}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &875866896
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 875866895}
m_Enabled: 1
--- !u!20 &875866897
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 875866895}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_GateFitMode: 2
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &875866898
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 875866895}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1630438942
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1630438944}
- component: {fileID: 1630438943}
m_Layer: 0
m_Name: ClientManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1630438943
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1630438942}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ba11049d7524f774eb34622bbf83084b, type: 3}
m_Name:
m_EditorClassIdentifier:
ServerIP: 127.0.0.1
Port: 2222
StartClientOnAwake: 1
DisplayName: Josh
PlayerColor: {r: 0.8490566, g: 0.03604484, b: 0.41602722, a: 1}
--- !u!4 &1630438944
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1630438942}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

+ 7
- 0
Assets/Scenes/Networking Test Scenes/ClientScene.unity.meta View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5dfdfd16afd13c746a261404b00a2538
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

+ 3
- 1
Assets/Scenes/Networking Test Scenes/ServerScene.unity View File

@ -38,7 +38,7 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.44657868, g: 0.49641263, b: 0.57481706, a: 1}
m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
@ -293,6 +293,8 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
Port: 2222
StartServerOnAwake: 1
Server: {fileID: 11400000, guid: aba6c842adfc9904dba334cb48257361, type: 2}
--- !u!4 &2055869450
Transform:
m_ObjectHideFlags: 0

+ 1
- 1
Assets/Scripts/Networking/Client.meta View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4ae854757cfced04b827be58abda3f40
guid: e511b7fbb3dd6a74e962f23f4a0c785d
folderAsset: yes
DefaultImporter:
externalObjects: {}

+ 99
- 0
Assets/Scripts/Networking/Client/ClientManager.cs View File

@ -0,0 +1,99 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
namespace Networking.Client
{
public class ClientManager : MonoBehaviour
{
#region Inspector Fields
[Header("Connection Settings")]
[SerializeField]
[Tooltip("Server Address to Connect to")]
private string ServerIP;
[SerializeField]
[Tooltip("Port to connect on")]
private int Port;
[SerializeField]
[Tooltip("Try and connect on Play")]
private bool StartClientOnAwake;
[Header("Player Settings")]
[SerializeField]
[Tooltip("Player Name")]
private string DisplayName;
[SerializeField]
[Tooltip("Player Color")]
private Color PlayerColor;
[Header("References")]
[SerializeField]
[Tooltip("Reference to actual Client")]
protected ClientObject Client;
#endregion Inspector Fields
#region Private variables
#endregion Private variables
// Start is called before the first frame update
private void Awake()
{
if (StartClientOnAwake)
StartClient(ServerIP, Port);
}
public void OnEnable()
{
if (Client.isConnected)
RegisterHandlers();
}
public void OnDisable()
{
Client.client.UnregisterHandler(LoginProtocols.RequestLoginDetails);
}
public void StartClient(string ipAddress, int port)
{
Client.Connect(ipAddress, port);
RegisterHandlers();
}
public void RegisterHandlers()
{
Client.client.RegisterHandler(LoginProtocols.RequestLoginDetails, LoginRecieved);
Client.client.RegisterHandler(LoginProtocols.LoginSuccess, LoginSucess);
Client.client.RegisterHandler(LoginProtocols.LoginFail, LoginFail);
}
public void LoginRecieved(NetworkMessage msg)
{
Debug.Log("Connected to Server. Sending login details");
Client.client.Send(LoginProtocols.SendingLoginDetails, new LoginProtocols.LoginMsg(DisplayName, Color.white));
}
public void LoginSucess(NetworkMessage msg)
{
Debug.Log("Log in successful");
Client.UpdatePlayerDetails(DisplayName, PlayerColor);
}
public void LoginFail(NetworkMessage msg)
{
Debug.Log("Log in failed");
Client.Stop();
}
}
}

+ 11
- 0
Assets/Scripts/Networking/Client/ClientManager.cs.meta View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ba11049d7524f774eb34622bbf83084b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

+ 61
- 0
Assets/Scripts/Networking/Client/ClientObject.cs View File

@ -0,0 +1,61 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
namespace Networking.Client
{
[CreateAssetMenu(menuName = "Major Project/Networking/ClientObject", order = 150)]
public class ClientObject : ScriptableObject
{
#region Inspector Fields
[Header("Connection Settings")]
[SerializeField]
[Tooltip("Server Address to Connect to")]
private string ServerIP;
[SerializeField]
[Tooltip("Port to connect on")]
private int Port;
[Header("Player Settings")]
[SerializeField]
[Tooltip("Player Name")]
private string DisplayName;
[SerializeField]
[Tooltip("Player Color")]
private Color PlayerColor;
#endregion Inspector Fields
#region ReadOnly Variables
public NetworkClient client { get; private set; }
public bool isConnected { get { return client != null && client.isConnected; } }
#endregion ReadOnly Variables
public void Connect(string serverAddress,int port)
{
Debug.Log("Connecting to server: " + serverAddress + ", " + port);
this.ServerIP = serverAddress;
this.Port = port;
client = new NetworkClient();
client.Connect(serverAddress, port);
}
public void Stop()
{
client.Disconnect();
}
public void UpdatePlayerDetails(string DisplayName, Color PlayerColor)
{
this.DisplayName = DisplayName;
this.PlayerColor = PlayerColor;
}
}
}

+ 11
- 0
Assets/Scripts/Networking/Client/ClientObject.cs.meta View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 27b6fb280b4f36542b975c3931828f49
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

+ 4
- 0
Assets/Scripts/Networking/Core/Protocols/LoginProtocols.cs View File

@ -7,6 +7,8 @@ public class LoginProtocols
{
public const short RequestLoginDetails = 100;
public const short SendingLoginDetails = 101;
public const short LoginSuccess = 102;
public const short LoginFail = 103;
public class EmptyMsg : MessageBase { }
@ -15,6 +17,8 @@ public class LoginProtocols
public string Name;
public Color Color;
public LoginMsg() { }
public LoginMsg (string Name, Color Color)
{
this.Name = Name;

+ 8
- 0
Assets/Scripts/Networking/Core/Utility.meta View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ad7edbd1a6bba1f498cc60a8cb349990
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

+ 36
- 0
Assets/Scripts/Networking/Core/Utility/ExtensionMethods.cs View File

@ -0,0 +1,36 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
namespace Networking
{
public static class ExtensionMethods
{
public static bool TryRead<T>(this NetworkMessage msg, out T outMsg) where T : MessageBase, new()
{
try
{
outMsg = msg.ReadMessage<T>();
return true;
}
catch
{
outMsg = default(T);
return false;
}
}
public static T TryRead<T>(this NetworkMessage msg) where T : MessageBase, new()
{
T retval;
if (msg.TryRead(out retval))
return retval;
return null;
}
}
}

+ 11
- 0
Assets/Scripts/Networking/Core/Utility/ExtensionMethods.cs.meta View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a367e274861a6ac42af97633e2f790f8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

+ 59
- 2
Assets/Scripts/Networking/Server/ClientData.cs View File

@ -52,6 +52,8 @@ namespace Networking.Server
Reset();
server.RegisterHandler(MsgType.Connect, OnClientConnect);
server.RegisterHandler(MsgType.Disconnect, OnClientDisconnect);
server.RegisterHandler(LoginProtocols.SendingLoginDetails, OnClientLogin);
}
public void OnClientConnect(NetworkMessage msg)
@ -59,10 +61,65 @@ namespace Networking.Server
if (ConnectedClients.Any(p => p.ID == msg.channelId))
{
Debug.LogError("Client[" + msg.channelId + "] already connected");
msg.conn.Send(LoginProtocols.LoginFail, new LoginProtocols.EmptyMsg());
return;
}
msg.conn.Send(LoginProtocols.RequestLoginDetails,new LoginProtocols.EmptyMsg());
msg.conn.Send(LoginProtocols.RequestLoginDetails, new LoginProtocols.EmptyMsg());
}
public void OnClientDisconnect(NetworkMessage msg)
{
if (!ConnectedClients.Any(p => p.ID == msg.conn.connectionId))
{
Debug.LogError("Unknown client disconnect [" + msg.conn.connectionId + "]");
return;
}
ClientData client = ConnectedClients.FirstOrDefault(p => p.ID == msg.conn.connectionId);
ConnectedClients.Remove(client);
DisconnectedClients.Add(client);
Debug.Log("Disconnected: " + client.Name);
}
public void OnClientLogin(NetworkMessage msg)
{
LoginProtocols.LoginMsg loginMsg;
if (!msg.TryRead(out loginMsg))
{
Debug.Log("Recieved unknown message from client");
msg.conn.Send(LoginProtocols.LoginFail, new LoginProtocols.EmptyMsg());
return;
}
if (ConnectedClients.Any(p => p.ID == msg.channelId))
{
Debug.LogError("Client[" + msg.channelId + "] already connected");
msg.conn.Send(LoginProtocols.LoginFail, new LoginProtocols.EmptyMsg());
return;
}
ClientData newClient = DisconnectedClients.FirstOrDefault(p => p.ID == msg.conn.connectionId);
if (newClient != default)
{
Debug.Log("Reconnection: " + loginMsg.Name + ((loginMsg.Name != newClient.Name) ? (" (Prev. " + newClient.Name +")") : ""));
DisconnectedClients.Remove(newClient);
}
else
{
Debug.Log("new Connection: " + loginMsg.Name);
newClient = new ClientData();
}
newClient.Color = loginMsg.Color;
newClient.Name = loginMsg.Name;
newClient.conn = msg.conn;
ConnectedClients.Add(newClient);
newClient.conn.Send(LoginProtocols.LoginSuccess, new LoginProtocols.LoginMsg(newClient.Name, newClient.Color));
}
@ -90,7 +147,7 @@ namespace Networking.Server
/// <summary>
/// Network connection ID
/// </summary>
public int ID;
public int ID { get { return (conn != null) ? conn.connectionId : -1; }}
/// <summary>
/// Connection to Client

+ 11
- 0
Assets/Scripts/Networking/Server/ServerManager.cs View File

@ -24,6 +24,17 @@ namespace Networking.Server
#endregion Inspector Fields
private void Awake()
{
if (StartServerOnAwake)
Server.StartServer(Port);
}
private void Update()
{
Server.ServerUpdate();
}
}

+ 7
- 3
Assets/Scripts/Networking/Server/ServerObject.cs View File

@ -5,7 +5,7 @@ using UnityEngine.Networking;
namespace Networking.Server {
[CreateAssetMenu(menuName = "Major Project/Networking/ClientList", order = 150)]
[CreateAssetMenu(menuName = "Major Project/Networking/ServerObject", order = 150)]
public class ServerObject : ScriptableObject
{
@ -33,9 +33,13 @@ namespace Networking.Server {
server = new NetworkServerSimple();
LoginHandler.SetUp(this);
server.Listen(port);
server.Listen(port);
}
public void ServerUpdate()
{
if (server != null)
server.Update();
}

Loading…
Cancel
Save