1
0
Fork 0

Add Server and client

This commit is contained in:
MrDev023 2016-06-22 21:45:43 +02:00
parent 3d7c9e3f7f
commit 6258438d44
262 changed files with 2661 additions and 0 deletions

View file

@ -0,0 +1,60 @@
using System;
using UnityEngine;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
class Client
{
private UdpClient client;
private IPEndPoint ep;
private Thread receiveThread;
private volatile Boolean connected = false;
public Client(String ip,int port)
{
ep = new IPEndPoint(IPAddress.Parse(ip), port);
client = new UdpClient();
receiveThread = new Thread(new ThreadStart(loop));
Register.registerClass();
}
public void connect()
{
client.Connect(ep);
connected = true;
receiveThread.Start();
}
public void loop()
{
while (connected)
{
byte[] data = client.Receive(ref ep);
DataBuffer dataBuffer = new DataBuffer(data);
int id = dataBuffer.getInt();
IPacket packet = (IPacket)Register.instantiate(id);
packet.read(dataBuffer);
packet.manage(data, this);
}
}
public void send(IPacket packet)
{
DataBuffer data = new DataBuffer();
packet.write(data);
client.Send(data.getData(), data.getData().Length);
}
public void disconnect()
{
client.Close();
connected = false;
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6ef5ac19c402f2c42a01c3f10df1e3e0
timeCreated: 1461077674
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,22 @@
using UnityEngine;
class MainClient {
public static Client client;
public static string pseudo;
public static int connected = -1;
public static void connect (string host,int port,string pseudo) {
client = new Client(host, port);
client.connect();
connected = 0;
client.send(new MainState_Connection_Request_Packet(pseudo, 0));
}
public static void OnGUI()
{
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 353dd1b92e911804cba3e451a2a5aa47
timeCreated: 1461092835
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 49ebafc3208dd5e42b7dcba1440f6f45
folderAsset: yes
timeCreated: 1461077683
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,214 @@
using UnityEngine;
using System.Collections;
using System;
public class DataBuffer{
//readonly constant static -> const non static
public static readonly int SIZE = 1024;
private byte[] data;
private int pointer;
public DataBuffer()
{
data = new byte[SIZE];
pointer = 0;
}
public DataBuffer(byte[] data)
{
this.data = data;
pointer = 0;
}
public void put(byte a)
{
if (pointer >= SIZE)
{
Debug.Log( "Databuffer write overflow");
return;
}
data[pointer++] = a;
}
public void put(sbyte a)
{
if (pointer >= SIZE)
{
Debug.Log("Databuffer write overflow");
return;
}
data[pointer++] = (byte)a;
}
public void put(short a)
{
put((byte)((a >> 8) & 0xff));
put((byte)((a >> 0) & 0xff));
}
public void put(int a)
{
put((byte)((a >> 24) & 0xff));
put((byte)((a >> 16) & 0xff));
put((byte)((a >> 8) & 0xff));
put((byte)((a >> 0) & 0xff));
}
public void put(long a)
{
put((byte)((a >> 56) & 0xff));
put((byte)((a >> 48) & 0xff));
put((byte)((a >> 40) & 0xff));
put((byte)((a >> 32) & 0xff));
put((byte)((a >> 24) & 0xff));
put((byte)((a >> 16) & 0xff));
put((byte)((a >> 8) & 0xff));
put((byte)((a >> 0) & 0xff));
}
public void put(float a)
{
byte[] array = BitConverter.GetBytes(a);
foreach(byte b in array)
{
put(b);
}
}
public void put(double a)
{
byte[] array = BitConverter.GetBytes(a);
foreach (byte b in array)
{
put(b);
}
}
public void put(char a)
{
put((byte)a);
}
public void put(String a)
{
char[] b = a.ToCharArray();
put(a.Length);
for (int i = 0; i < a.Length; i++)
{
put(b[i]);
}
}
public byte getByte()
{
if (pointer >= SIZE)
{
Debug.Log("Databuffer write overflow");
return 0;
}
return data[pointer++];
}
public sbyte getSByte()
{
if (pointer >= SIZE)
{
Debug.Log("Databuffer write overflow");
return 0;
}
return (sbyte)data[pointer++];
}
public short getShort()
{
return (short)((
(getByte() << 8) & 0xff00) |
(getByte() & 0xff));
}
public int getInt()
{
return (int)((
(getByte() << 24) & 0xff000000) |
(getByte() << 16 & 0xff0000) |
(getByte() << 8 & 0xff00) |
(getByte() & 0xff));
}
public long getLong()
{
return (long)(
((ulong)((long)getByte() << 56) & 0xff00000000000000L) |
((ulong)((long)getByte() << 48) & 0xff000000000000L) |
((ulong)((long)getByte() << 40) & 0xff0000000000L) |
(ulong)(((long)getByte() << 32) & 0xff00000000L) |
((ulong)((long)getByte() << 24) & 0xff000000L) |
((ulong)((long)getByte() << 16) & 0xff0000L) |
((ulong)((long)getByte() << 8) & 0xff00L) |
((ulong)(long)getByte() & 0xffL));
}
public float getFloat()
{
byte[] array = new byte[4] { getByte(), getByte(), getByte(), getByte() };
return BitConverter.ToSingle(array, 0);
}
public double getDouble()
{
byte[] array = new byte[8] { getByte(), getByte(), getByte(), getByte(), getByte(), getByte(), getByte(), getByte() };
return BitConverter.ToDouble(array, 0);
}
public char getChar()
{
return (char)getByte();
}
public String getString()
{
int size = getInt();
char[] st = new char[size];
for (int i = 0; i < size; i++)
{
st[i] = getChar();
}
return new String(st);
}
public byte[] getData()
{
return data;
}
public void setData(byte[] data)
{
this.data = data;
}
public int getPointer()
{
return pointer;
}
public void setPointer(int pointer)
{
this.pointer = pointer;
}
public static int getSize()
{
return SIZE;
}
public void clear()
{
pointer = 0;
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 078e293494940144a9d5d954dc84daed
timeCreated: 1461077692
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
interface IPacket
{
void read(DataBuffer data);
void write(DataBuffer data);
void manage(byte[] data, Client client);
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c5c6e5983b09e5b45a1c0ff1cb10f177
timeCreated: 1461092836
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,36 @@
using UnityEngine;
using System.Collections;
using System;
public class Register {
public static Type[] registeredClass;
public static void registerClass()
{
registeredClass = new Type[] {
typeof(MessagePacket),
typeof(MainState_Connection_Request_Packet),
typeof(Disconnect_Client_Packet)
};
}
public static Type getClass(int id)
{
return registeredClass[id];
}
public static int getId(Type cl)
{
for (int i = 0; i < registeredClass.Length; i++)
{
if (cl == registeredClass[i]) return i;
}
return -1;
}
public static object instantiate(int id)
{
return getClass(id).GetConstructor(Type.EmptyTypes).Invoke(Type.EmptyTypes);
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 7b248295a2003cb4f8f2c02963c4dc69
timeCreated: 1461091725
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: eafcd88293cff404b855b1726af268b7
folderAsset: yes
timeCreated: 1461092835
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Disconnect_Client_Packet : IPacket
{
public string pseudo;
public Disconnect_Client_Packet() { }
public Disconnect_Client_Packet(string pseudo) { this.pseudo = pseudo; }
void IPacket.read(DataBuffer data)
{
this.pseudo = data.getString();
}
void IPacket.write(DataBuffer data)
{
data.put(Register.getId(typeof(Disconnect_Client_Packet)));
data.put(this.pseudo);
}
void IPacket.manage(byte[] data, Client client)
{
if (pseudo.Equals(MainClient.pseudo))
{
MainClient.connected = MainState_Connection_Request_Packet.DISCONNECTED;
MainClient.client.disconnect();
}
else
{
}
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 09c2a6099528c8445b15ffe7adbde542
timeCreated: 1461172729
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,57 @@
using System;
using UnityEngine;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class MainState_Connection_Request_Packet : IPacket
{
public static readonly int REQUEST = 0, ACCEPTED = 1, REFUSED = 2, TIME_OUT = 3, ALREADY_CONNECTED = 4, PSEUDO_INCORRECT = 5,DISCONNECTED = 6;
public String pseudo;
public int id;
public MainState_Connection_Request_Packet() { }
public MainState_Connection_Request_Packet(String pseudo,int id)
{
this.pseudo = pseudo;
this.id = id;
}
void IPacket.write(DataBuffer data)
{
data.put(Register.getId(typeof(MainState_Connection_Request_Packet)));
data.put(pseudo);
data.put(id);
}
void IPacket.read(DataBuffer data)
{
this.pseudo = data.getString();
this.id = data.getInt();
}
void IPacket.manage(byte[] data, Client client)
{
if(id == ACCEPTED)
{
MainClient.connected = ACCEPTED;
MainClient.pseudo = this.pseudo;
}
else if(id == REFUSED)
{
MainClient.connected = REFUSED;
}
else if (id == ALREADY_CONNECTED)
{
MainClient.connected = ALREADY_CONNECTED;
}
else if (id == PSEUDO_INCORRECT)
{
MainClient.connected = PSEUDO_INCORRECT;
}
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: e632acbe3e907fb42992ec51c2549272
timeCreated: 1461155199
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,38 @@
using System;
using UnityEngine;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class MessagePacket : IPacket
{
private String pseudo, message;
public MessagePacket() { }
public MessagePacket(String pseudo, String message)
{
this.message = message;
this.pseudo = pseudo;
}
void IPacket.read(DataBuffer data)
{
this.pseudo = data.getString();
this.message = data.getString();
}
void IPacket.write(DataBuffer data)
{
data.put(Register.getId(typeof(MessagePacket)));
data.put(this.pseudo);
data.put(this.message);
}
void IPacket.manage(byte[] data,Client client)
{
Debug.Log(this.pseudo + " : " + this.message);
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6df0f62eafd1c224ea52a0721bc3e4b1
timeCreated: 1461092835
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,27 @@
using UnityEngine;
using System.Collections;
public class PingPacket : IPacket {
public long current;
public PingPacket()
{
}
void IPacket.read(DataBuffer data)
{
}
void IPacket.write(DataBuffer data)
{
}
void IPacket.manage(byte[] data, Client client)
{
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6c3875a60f90ff146950d2ad190f0e09
timeCreated: 1462518396
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: