initial offline mode, added reference docs for message types
parent
593afca4d1
commit
69d0f1bc80
|
|
@ -5,7 +5,7 @@ using UnityEngine;
|
||||||
|
|
||||||
namespace VelNet
|
namespace VelNet
|
||||||
{
|
{
|
||||||
public static class BinaryWriterExtensions
|
public static partial class BinaryWriterExtensions
|
||||||
{
|
{
|
||||||
#region Writers
|
#region Writers
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ using UnityEngine;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using UnityEngine.SceneManagement;
|
using UnityEngine.SceneManagement;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace VelNet
|
namespace VelNet
|
||||||
{
|
{
|
||||||
|
|
@ -119,6 +120,8 @@ namespace VelNet
|
||||||
public bool connected;
|
public bool connected;
|
||||||
private bool wasConnected;
|
private bool wasConnected;
|
||||||
private double lastConnectionCheck;
|
private double lastConnectionCheck;
|
||||||
|
private bool offlineMode;
|
||||||
|
private string offlineRoomName;
|
||||||
|
|
||||||
public List<NetworkObject> prefabs = new List<NetworkObject>();
|
public List<NetworkObject> prefabs = new List<NetworkObject>();
|
||||||
public NetworkObject[] sceneObjects;
|
public NetworkObject[] sceneObjects;
|
||||||
|
|
@ -316,7 +319,8 @@ namespace VelNet
|
||||||
onlyConnectToSameVersion
|
onlyConnectToSameVersion
|
||||||
? $"{Application.productName}_{Application.version}"
|
? $"{Application.productName}_{Application.version}"
|
||||||
: $"{Application.productName}",
|
: $"{Application.productName}",
|
||||||
Hash128.Compute(SystemInfo.deviceUniqueIdentifier).ToString()
|
Hash128.Compute(SystemInfo.deviceUniqueIdentifier + Application.productName)
|
||||||
|
.ToString()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -742,137 +746,7 @@ namespace VelNet
|
||||||
AddMessage(new ConnectedMessage());
|
AddMessage(new ConnectedMessage());
|
||||||
while (socketConnection.Connected)
|
while (socketConnection.Connected)
|
||||||
{
|
{
|
||||||
//read a byte
|
HandleIncomingMessage(reader);
|
||||||
int b = stream.ReadByte();
|
|
||||||
MessageReceivedType type = (MessageReceivedType)b;
|
|
||||||
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
//login
|
|
||||||
case MessageReceivedType.LOGGED_IN:
|
|
||||||
{
|
|
||||||
AddMessage(new LoginMessage
|
|
||||||
{
|
|
||||||
// not really the sender...
|
|
||||||
userId = GetIntFromBytes(ReadExact(stream, 4))
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//rooms
|
|
||||||
case MessageReceivedType.ROOM_LIST:
|
|
||||||
{
|
|
||||||
RoomsMessage m = new RoomsMessage();
|
|
||||||
m.rooms = new List<ListedRoom>();
|
|
||||||
int N = GetIntFromBytes(ReadExact(stream, 4)); //the size of the payload
|
|
||||||
byte[] utf8data = ReadExact(stream, N);
|
|
||||||
string roomMessage = Encoding.UTF8.GetString(utf8data);
|
|
||||||
|
|
||||||
|
|
||||||
string[] sections = roomMessage.Split(',');
|
|
||||||
foreach (string s in sections)
|
|
||||||
{
|
|
||||||
string[] pieces = s.Split(':');
|
|
||||||
if (pieces.Length == 2)
|
|
||||||
{
|
|
||||||
m.rooms.Add(new ListedRoom
|
|
||||||
{
|
|
||||||
name = pieces[0],
|
|
||||||
numUsers = int.Parse(pieces[1])
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AddMessage(m);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MessageReceivedType.ROOM_DATA:
|
|
||||||
{
|
|
||||||
RoomDataMessage rdm = new RoomDataMessage();
|
|
||||||
int N = stream.ReadByte();
|
|
||||||
byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8
|
|
||||||
string roomname = Encoding.UTF8.GetString(utf8data);
|
|
||||||
|
|
||||||
N = GetIntFromBytes(ReadExact(stream, 4)); //the number of client datas to read
|
|
||||||
rdm.room = roomname;
|
|
||||||
for (int i = 0; i < N; i++)
|
|
||||||
{
|
|
||||||
// client id + short string
|
|
||||||
int client_id = GetIntFromBytes(ReadExact(stream, 4));
|
|
||||||
int s = stream.ReadByte(); //size of string
|
|
||||||
utf8data = ReadExact(stream, s); //the username
|
|
||||||
string username = Encoding.UTF8.GetString(utf8data);
|
|
||||||
rdm.members.Add((client_id, username));
|
|
||||||
}
|
|
||||||
|
|
||||||
AddMessage(rdm);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//joined
|
|
||||||
case MessageReceivedType.PLAYER_JOINED:
|
|
||||||
{
|
|
||||||
JoinMessage m = new JoinMessage();
|
|
||||||
m.userId = GetIntFromBytes(ReadExact(stream, 4));
|
|
||||||
int N = stream.ReadByte();
|
|
||||||
byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8
|
|
||||||
m.room = Encoding.UTF8.GetString(utf8data);
|
|
||||||
AddMessage(m);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//data
|
|
||||||
case MessageReceivedType.DATA_MESSAGE:
|
|
||||||
{
|
|
||||||
DataMessage m = new DataMessage();
|
|
||||||
m.senderId = GetIntFromBytes(ReadExact(stream, 4));
|
|
||||||
int N = GetIntFromBytes(ReadExact(stream, 4)); //the size of the payload
|
|
||||||
m.data = ReadExact(stream, N); //the message
|
|
||||||
AddMessage(m);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// new master
|
|
||||||
case MessageReceivedType.MASTER_MESSAGE:
|
|
||||||
{
|
|
||||||
ChangeMasterMessage m = new ChangeMasterMessage();
|
|
||||||
m.masterId = GetIntFromBytes(ReadExact(stream, 4)); // sender is the new master
|
|
||||||
AddMessage(m);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MessageReceivedType.YOU_JOINED:
|
|
||||||
{
|
|
||||||
YouJoinedMessage m = new YouJoinedMessage();
|
|
||||||
int N = GetIntFromBytes(ReadExact(stream, 4));
|
|
||||||
m.playerIds = new List<int>();
|
|
||||||
for (int i = 0; i < N; i++)
|
|
||||||
{
|
|
||||||
m.playerIds.Add(GetIntFromBytes(ReadExact(stream, 4)));
|
|
||||||
}
|
|
||||||
|
|
||||||
N = stream.ReadByte();
|
|
||||||
byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8
|
|
||||||
m.room = Encoding.UTF8.GetString(utf8data);
|
|
||||||
AddMessage(m);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MessageReceivedType.PLAYER_LEFT:
|
|
||||||
{
|
|
||||||
PlayerLeftMessage m = new PlayerLeftMessage();
|
|
||||||
m.userId = GetIntFromBytes(ReadExact(stream, 4));
|
|
||||||
int N = stream.ReadByte();
|
|
||||||
byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8
|
|
||||||
m.room = Encoding.UTF8.GetString(utf8data);
|
|
||||||
AddMessage(m);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case MessageReceivedType.YOU_LEFT:
|
|
||||||
{
|
|
||||||
YouLeftMessage m = new YouLeftMessage();
|
|
||||||
int N = stream.ReadByte();
|
|
||||||
byte[] utf8data = ReadExact(stream, N); //the room name, encoded as utf-8
|
|
||||||
m.room = Encoding.UTF8.GetString(utf8data);
|
|
||||||
AddMessage(m);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (ThreadAbortException)
|
catch (ThreadAbortException)
|
||||||
|
|
@ -882,6 +756,9 @@ namespace VelNet
|
||||||
catch (SocketException socketException)
|
catch (SocketException socketException)
|
||||||
{
|
{
|
||||||
VelNetLogger.Error("Socket exception: " + socketException);
|
VelNetLogger.Error("Socket exception: " + socketException);
|
||||||
|
VelNetLogger.Error("Switching to offline mode");
|
||||||
|
offlineMode = true;
|
||||||
|
AddMessage(new ConnectedMessage());
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
@ -891,8 +768,145 @@ namespace VelNet
|
||||||
connected = false;
|
connected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void HandleIncomingMessage(BinaryReader reader)
|
||||||
|
{
|
||||||
|
MessageReceivedType type = (MessageReceivedType)reader.ReadByte();
|
||||||
|
Debug.Log(type);
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
//login
|
||||||
|
case MessageReceivedType.LOGGED_IN:
|
||||||
|
{
|
||||||
|
AddMessage(new LoginMessage
|
||||||
|
{
|
||||||
|
// not really the sender...
|
||||||
|
userId = GetIntFromBytes(reader.ReadBytes(4))
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//rooms
|
||||||
|
case MessageReceivedType.ROOM_LIST:
|
||||||
|
{
|
||||||
|
RoomsMessage m = new RoomsMessage();
|
||||||
|
m.rooms = new List<ListedRoom>();
|
||||||
|
int N = GetIntFromBytes(reader.ReadBytes(4)); //the size of the payload
|
||||||
|
byte[] utf8data = reader.ReadBytes(N);
|
||||||
|
string roomMessage = Encoding.UTF8.GetString(utf8data);
|
||||||
|
|
||||||
|
string[] sections = roomMessage.Split(',');
|
||||||
|
foreach (string s in sections)
|
||||||
|
{
|
||||||
|
string[] pieces = s.Split(':');
|
||||||
|
if (pieces.Length == 2)
|
||||||
|
{
|
||||||
|
m.rooms.Add(new ListedRoom
|
||||||
|
{
|
||||||
|
name = pieces[0],
|
||||||
|
numUsers = int.Parse(pieces[1])
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AddMessage(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MessageReceivedType.ROOM_DATA:
|
||||||
|
{
|
||||||
|
RoomDataMessage rdm = new RoomDataMessage();
|
||||||
|
int N = reader.ReadByte();
|
||||||
|
byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8
|
||||||
|
string roomname = Encoding.UTF8.GetString(utf8data);
|
||||||
|
|
||||||
|
N = GetIntFromBytes(reader.ReadBytes(4)); //the number of client datas to read
|
||||||
|
rdm.room = roomname;
|
||||||
|
for (int i = 0; i < N; i++)
|
||||||
|
{
|
||||||
|
// client id + short string
|
||||||
|
int clientId = GetIntFromBytes(reader.ReadBytes(4));
|
||||||
|
int s = reader.ReadByte(); //size of string
|
||||||
|
utf8data = reader.ReadBytes(s); //the username
|
||||||
|
string username = Encoding.UTF8.GetString(utf8data);
|
||||||
|
rdm.members.Add((clientId, username));
|
||||||
|
}
|
||||||
|
|
||||||
|
AddMessage(rdm);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//joined
|
||||||
|
case MessageReceivedType.PLAYER_JOINED:
|
||||||
|
{
|
||||||
|
JoinMessage m = new JoinMessage();
|
||||||
|
m.userId = GetIntFromBytes(reader.ReadBytes(4));
|
||||||
|
int N = reader.ReadByte();
|
||||||
|
byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8
|
||||||
|
m.room = Encoding.UTF8.GetString(utf8data);
|
||||||
|
AddMessage(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//data
|
||||||
|
case MessageReceivedType.DATA_MESSAGE:
|
||||||
|
{
|
||||||
|
DataMessage m = new DataMessage();
|
||||||
|
m.senderId = GetIntFromBytes(reader.ReadBytes(4));
|
||||||
|
int N = GetIntFromBytes(reader.ReadBytes(4)); //the size of the payload
|
||||||
|
m.data = reader.ReadBytes(N); //the message
|
||||||
|
AddMessage(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// new master
|
||||||
|
case MessageReceivedType.MASTER_MESSAGE:
|
||||||
|
{
|
||||||
|
ChangeMasterMessage m = new ChangeMasterMessage();
|
||||||
|
m.masterId = GetIntFromBytes(reader.ReadBytes(4)); // sender is the new master
|
||||||
|
AddMessage(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case MessageReceivedType.YOU_JOINED:
|
||||||
|
{
|
||||||
|
YouJoinedMessage m = new YouJoinedMessage();
|
||||||
|
int N = GetIntFromBytes(reader.ReadBytes(4));
|
||||||
|
m.playerIds = new List<int>();
|
||||||
|
for (int i = 0; i < N; i++)
|
||||||
|
{
|
||||||
|
m.playerIds.Add(GetIntFromBytes(reader.ReadBytes(4)));
|
||||||
|
}
|
||||||
|
|
||||||
|
N = reader.ReadByte();
|
||||||
|
byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8
|
||||||
|
m.room = Encoding.UTF8.GetString(utf8data);
|
||||||
|
AddMessage(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MessageReceivedType.PLAYER_LEFT:
|
||||||
|
{
|
||||||
|
PlayerLeftMessage m = new PlayerLeftMessage();
|
||||||
|
m.userId = GetIntFromBytes(reader.ReadBytes(4));
|
||||||
|
int N = reader.ReadByte();
|
||||||
|
byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8
|
||||||
|
m.room = Encoding.UTF8.GetString(utf8data);
|
||||||
|
AddMessage(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MessageReceivedType.YOU_LEFT:
|
||||||
|
{
|
||||||
|
YouLeftMessage m = new YouLeftMessage();
|
||||||
|
int N = reader.ReadByte();
|
||||||
|
byte[] utf8data = reader.ReadBytes(N); //the room name, encoded as utf-8
|
||||||
|
m.room = Encoding.UTF8.GetString(utf8data);
|
||||||
|
AddMessage(m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
VelNetLogger.Error("Unknown message type");
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(type), type, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ListenForDataUDP()
|
private void ListenForDataUDP()
|
||||||
{
|
{
|
||||||
|
if (offlineMode) return;
|
||||||
|
|
||||||
//I don't yet have a UDP connection
|
//I don't yet have a UDP connection
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -900,17 +914,14 @@ namespace VelNet
|
||||||
Debug.Assert(addresses.Length > 0);
|
Debug.Assert(addresses.Length > 0);
|
||||||
RemoteEndPoint = new IPEndPoint(addresses[0], port);
|
RemoteEndPoint = new IPEndPoint(addresses[0], port);
|
||||||
|
|
||||||
|
udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||||||
udpSocket = new Socket(AddressFamily.InterNetwork,
|
|
||||||
SocketType.Dgram, ProtocolType.Udp);
|
|
||||||
|
|
||||||
|
|
||||||
udpConnected = false;
|
udpConnected = false;
|
||||||
byte[] buffer = new byte[1024];
|
byte[] buffer = new byte[1024];
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
buffer[0] = 0;
|
buffer[0] = 0;
|
||||||
Array.Copy(get_be_bytes(userid), 0, buffer, 1, 4);
|
Array.Copy(GetBigEndianBytes(userid), 0, buffer, 1, 4);
|
||||||
udpSocket.SendTo(buffer, 5, SocketFlags.None, RemoteEndPoint);
|
udpSocket.SendTo(buffer, 5, SocketFlags.None, RemoteEndPoint);
|
||||||
|
|
||||||
if (udpSocket.Available == 0)
|
if (udpSocket.Available == 0)
|
||||||
|
|
@ -981,6 +992,12 @@ namespace VelNet
|
||||||
/// <returns>True if the message successfully sent. False if it failed and we should quit</returns>
|
/// <returns>True if the message successfully sent. False if it failed and we should quit</returns>
|
||||||
private static bool SendTcpMessage(byte[] message)
|
private static bool SendTcpMessage(byte[] message)
|
||||||
{
|
{
|
||||||
|
if (instance.offlineMode)
|
||||||
|
{
|
||||||
|
instance.FakeServer(message);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Logging.Info("Sent: " + clientMessage);
|
// Logging.Info("Sent: " + clientMessage);
|
||||||
if (instance.socketConnection == null)
|
if (instance.socketConnection == null)
|
||||||
{
|
{
|
||||||
|
|
@ -1019,7 +1036,7 @@ namespace VelNet
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static byte[] get_be_bytes(int n)
|
private static byte[] GetBigEndianBytes(int n)
|
||||||
{
|
{
|
||||||
return BitConverter.GetBytes(n).Reverse().ToArray();
|
return BitConverter.GetBytes(n).Reverse().ToArray();
|
||||||
}
|
}
|
||||||
|
|
@ -1104,10 +1121,10 @@ namespace VelNet
|
||||||
MemoryStream stream = new MemoryStream();
|
MemoryStream stream = new MemoryStream();
|
||||||
BinaryWriter writer = new BinaryWriter(stream);
|
BinaryWriter writer = new BinaryWriter(stream);
|
||||||
|
|
||||||
byte[] R = Encoding.UTF8.GetBytes(roomName);
|
byte[] roomBytes = Encoding.UTF8.GetBytes(roomName);
|
||||||
writer.Write((byte)MessageSendType.MESSAGE_JOINROOM);
|
writer.Write((byte)MessageSendType.MESSAGE_JOINROOM);
|
||||||
writer.Write((byte)R.Length);
|
writer.Write((byte)roomBytes.Length);
|
||||||
writer.Write(R);
|
writer.Write(roomBytes);
|
||||||
SendTcpMessage(stream.ToArray());
|
SendTcpMessage(stream.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1168,7 +1185,7 @@ namespace VelNet
|
||||||
MemoryStream mem = new MemoryStream();
|
MemoryStream mem = new MemoryStream();
|
||||||
BinaryWriter writer = new BinaryWriter(mem);
|
BinaryWriter writer = new BinaryWriter(mem);
|
||||||
writer.Write(sendType);
|
writer.Write(sendType);
|
||||||
writer.Write(get_be_bytes(message.Length));
|
writer.WriteBigEndian(message.Length);
|
||||||
writer.Write(message);
|
writer.Write(message);
|
||||||
return SendTcpMessage(mem.ToArray());
|
return SendTcpMessage(mem.ToArray());
|
||||||
}
|
}
|
||||||
|
|
@ -1176,7 +1193,7 @@ namespace VelNet
|
||||||
{
|
{
|
||||||
//udp message needs the type
|
//udp message needs the type
|
||||||
toSend[0] = sendType; //we don't
|
toSend[0] = sendType; //we don't
|
||||||
Array.Copy(get_be_bytes(instance.userid), 0, toSend, 1, 4);
|
Array.Copy(GetBigEndianBytes(instance.userid), 0, toSend, 1, 4);
|
||||||
Array.Copy(message, 0, toSend, 5, message.Length);
|
Array.Copy(message, 0, toSend, 5, message.Length);
|
||||||
SendUdpMessage(toSend, message.Length + 5); //shouldn't be over 1024...
|
SendUdpMessage(toSend, message.Length + 5); //shouldn't be over 1024...
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -1192,7 +1209,7 @@ namespace VelNet
|
||||||
MemoryStream stream = new MemoryStream();
|
MemoryStream stream = new MemoryStream();
|
||||||
BinaryWriter writer = new BinaryWriter(stream);
|
BinaryWriter writer = new BinaryWriter(stream);
|
||||||
writer.Write((byte)MessageSendType.MESSAGE_GROUP);
|
writer.Write((byte)MessageSendType.MESSAGE_GROUP);
|
||||||
writer.Write(get_be_bytes(message.Length));
|
writer.WriteBigEndian(message.Length);
|
||||||
writer.Write(message);
|
writer.Write(message);
|
||||||
writer.Write((byte)utf8bytes.Length);
|
writer.Write((byte)utf8bytes.Length);
|
||||||
writer.Write(utf8bytes);
|
writer.Write(utf8bytes);
|
||||||
|
|
@ -1201,7 +1218,7 @@ namespace VelNet
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
toSend[0] = (byte)MessageSendType.MESSAGE_GROUP;
|
toSend[0] = (byte)MessageSendType.MESSAGE_GROUP;
|
||||||
Array.Copy(get_be_bytes(instance.userid), 0, toSend, 1, 4);
|
Array.Copy(GetBigEndianBytes(instance.userid), 0, toSend, 1, 4);
|
||||||
//also need to send the group
|
//also need to send the group
|
||||||
toSend[5] = (byte)utf8bytes.Length;
|
toSend[5] = (byte)utf8bytes.Length;
|
||||||
Array.Copy(utf8bytes, 0, toSend, 6, utf8bytes.Length);
|
Array.Copy(utf8bytes, 0, toSend, 6, utf8bytes.Length);
|
||||||
|
|
@ -1223,14 +1240,14 @@ namespace VelNet
|
||||||
|
|
||||||
MemoryStream stream = new MemoryStream();
|
MemoryStream stream = new MemoryStream();
|
||||||
BinaryWriter writer = new BinaryWriter(stream);
|
BinaryWriter writer = new BinaryWriter(stream);
|
||||||
byte[] R = Encoding.UTF8.GetBytes(groupName);
|
byte[] groupNameBytes = Encoding.UTF8.GetBytes(groupName);
|
||||||
writer.Write((byte)6);
|
writer.Write((byte)6);
|
||||||
writer.Write((byte)R.Length);
|
writer.Write((byte)groupNameBytes.Length);
|
||||||
writer.Write(R);
|
writer.Write(groupNameBytes);
|
||||||
writer.Write(get_be_bytes(clientIds.Count * 4));
|
writer.WriteBigEndian(clientIds.Count * 4);
|
||||||
foreach (int c in clientIds)
|
foreach (int c in clientIds)
|
||||||
{
|
{
|
||||||
writer.Write(get_be_bytes(c));
|
writer.WriteBigEndian(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendTcpMessage(stream.ToArray());
|
SendTcpMessage(stream.ToArray());
|
||||||
|
|
@ -1490,5 +1507,100 @@ namespace VelNet
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Pretends to be the server and sends back the result to be handled. Only should be called in offline mode.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message">The message that was meant to be sent to the server.</param>
|
||||||
|
private void FakeServer(byte[] message)
|
||||||
|
{
|
||||||
|
MemoryStream mem = new MemoryStream(message);
|
||||||
|
BinaryReader reader = new BinaryReader(mem);
|
||||||
|
MessageSendType messageType = (MessageSendType)reader.ReadByte();
|
||||||
|
|
||||||
|
MemoryStream outMem = new MemoryStream();
|
||||||
|
BinaryWriter outWriter = new BinaryWriter(outMem);
|
||||||
|
|
||||||
|
switch (messageType)
|
||||||
|
{
|
||||||
|
case MessageSendType.MESSAGE_OTHERS_ORDERED:
|
||||||
|
break;
|
||||||
|
case MessageSendType.MESSAGE_ALL_ORDERED:
|
||||||
|
break;
|
||||||
|
case MessageSendType.MESSAGE_LOGIN:
|
||||||
|
outWriter.Write((byte)MessageReceivedType.LOGGED_IN);
|
||||||
|
outWriter.WriteBigEndian(0);
|
||||||
|
break;
|
||||||
|
case MessageSendType.MESSAGE_GETROOMS:
|
||||||
|
outWriter.Write((byte)MessageReceivedType.ROOM_LIST);
|
||||||
|
outWriter.WriteBigEndian(0);
|
||||||
|
break;
|
||||||
|
case MessageSendType.MESSAGE_JOINROOM:
|
||||||
|
{
|
||||||
|
string roomName = Encoding.UTF8.GetString(reader.ReadBytes(reader.ReadByte()));
|
||||||
|
|
||||||
|
// if leaving a room
|
||||||
|
if (string.IsNullOrEmpty(roomName))
|
||||||
|
{
|
||||||
|
outWriter.Write((byte)MessageReceivedType.YOU_LEFT);
|
||||||
|
byte[] roomNameBytes = Encoding.UTF8.GetBytes(offlineRoomName);
|
||||||
|
outWriter.Write((byte)roomNameBytes.Length);
|
||||||
|
outWriter.Write(roomNameBytes);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outWriter.Write((byte)MessageReceivedType.YOU_JOINED);
|
||||||
|
outWriter.WriteBigEndian(1); // num players
|
||||||
|
outWriter.WriteBigEndian(0); // our userid
|
||||||
|
byte[] roomNameBytes = Encoding.UTF8.GetBytes(roomName);
|
||||||
|
outWriter.Write((byte)roomNameBytes.Length);
|
||||||
|
outWriter.Write(roomNameBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
offlineRoomName = roomName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MessageSendType.MESSAGE_OTHERS:
|
||||||
|
break;
|
||||||
|
case MessageSendType.MESSAGE_ALL:
|
||||||
|
break;
|
||||||
|
case MessageSendType.MESSAGE_GROUP:
|
||||||
|
break;
|
||||||
|
case MessageSendType.MESSAGE_SETGROUP:
|
||||||
|
break;
|
||||||
|
case MessageSendType.MESSAGE_GETROOMDATA:
|
||||||
|
{
|
||||||
|
outWriter.Write((byte)MessageReceivedType.ROOM_DATA);
|
||||||
|
byte[] roomNameBytes = Encoding.UTF8.GetBytes("OFFLINE");
|
||||||
|
outWriter.Write((byte)roomNameBytes.Length);
|
||||||
|
outWriter.Write(roomNameBytes);
|
||||||
|
outWriter.WriteBigEndian(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
|
||||||
|
outMem.Position = 0;
|
||||||
|
// if we run this in the same thread, then it is modifying the messages collection while iterating
|
||||||
|
Task.Run(() => { HandleIncomingMessage(new BinaryReader(outMem)); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static partial class BinaryWriterExtensions
|
||||||
|
{
|
||||||
|
public static void WriteBigEndian(this BinaryWriter writer, int value)
|
||||||
|
{
|
||||||
|
byte[] data = BitConverter.GetBytes(value);
|
||||||
|
Array.Reverse(data);
|
||||||
|
writer.Write(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int ReadBigEndian(this BinaryReader reader)
|
||||||
|
{
|
||||||
|
byte[] data = reader.ReadBytes(4);
|
||||||
|
Array.Reverse(data);
|
||||||
|
return BitConverter.ToInt32(data, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace VelNet
|
namespace VelNet
|
||||||
|
|
@ -82,12 +83,11 @@ namespace VelNet
|
||||||
///
|
///
|
||||||
/// The length of the byte[] for message is fixed according to the message type
|
/// The length of the byte[] for message is fixed according to the message type
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void HandleMessage(VelNetManager.DataMessage m, bool unknown_sender = false)
|
public void HandleMessage(VelNetManager.DataMessage m, bool unknownSender = false)
|
||||||
{
|
{
|
||||||
using MemoryStream mem = new MemoryStream(m.data);
|
using MemoryStream mem = new MemoryStream(m.data);
|
||||||
using BinaryReader reader = new BinaryReader(mem);
|
using BinaryReader reader = new BinaryReader(mem);
|
||||||
|
|
||||||
//individual message parameters separated by comma
|
|
||||||
VelNetManager.MessageType messageType = (VelNetManager.MessageType)reader.ReadByte();
|
VelNetManager.MessageType messageType = (VelNetManager.MessageType)reader.ReadByte();
|
||||||
|
|
||||||
if (messageType == VelNetManager.MessageType.Custom)
|
if (messageType == VelNetManager.MessageType.Custom)
|
||||||
|
|
@ -109,7 +109,7 @@ namespace VelNet
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unknown_sender)
|
if (unknownSender)
|
||||||
{
|
{
|
||||||
VelNetLogger.Error("Received non-custom message from player that doesn't exist ");
|
VelNetLogger.Error("Received non-custom message from player that doesn't exist ");
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ NavMeshSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_BuildSettings:
|
m_BuildSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 3
|
||||||
agentTypeID: 0
|
agentTypeID: 0
|
||||||
agentRadius: 0.5
|
agentRadius: 0.5
|
||||||
agentHeight: 2
|
agentHeight: 2
|
||||||
|
|
@ -117,7 +117,7 @@ NavMeshSettings:
|
||||||
cellSize: 0.16666667
|
cellSize: 0.16666667
|
||||||
manualTileSize: 0
|
manualTileSize: 0
|
||||||
tileSize: 256
|
tileSize: 256
|
||||||
accuratePlacement: 0
|
buildHeightMesh: 0
|
||||||
maxJobWorkers: 0
|
maxJobWorkers: 0
|
||||||
preserveTilesOutsideBounds: 0
|
preserveTilesOutsideBounds: 0
|
||||||
debug:
|
debug:
|
||||||
|
|
@ -199,7 +199,9 @@ Canvas:
|
||||||
m_OverrideSorting: 0
|
m_OverrideSorting: 0
|
||||||
m_OverridePixelPerfect: 0
|
m_OverridePixelPerfect: 0
|
||||||
m_SortingBucketNormalizedSize: 0
|
m_SortingBucketNormalizedSize: 0
|
||||||
|
m_VertexColorAlwaysGammaSpace: 0
|
||||||
m_AdditionalShaderChannelsFlag: 0
|
m_AdditionalShaderChannelsFlag: 0
|
||||||
|
m_UpdateRectTransformForStandalone: 0
|
||||||
m_SortingLayerID: 0
|
m_SortingLayerID: 0
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 0
|
||||||
m_TargetDisplay: 0
|
m_TargetDisplay: 0
|
||||||
|
|
@ -337,6 +339,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
m_SendPointerHoverToParent: 1
|
||||||
m_HorizontalAxis: Horizontal
|
m_HorizontalAxis: Horizontal
|
||||||
m_VerticalAxis: Vertical
|
m_VerticalAxis: Vertical
|
||||||
m_SubmitButton: Submit
|
m_SubmitButton: Submit
|
||||||
|
|
@ -372,7 +375,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 1
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &652307109
|
--- !u!1 &652307109
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -466,7 +469,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 2
|
m_RootOrder: 3
|
||||||
m_LocalEulerAnglesHint: {x: 25.729, y: -12.365, z: 17.037}
|
m_LocalEulerAnglesHint: {x: 25.729, y: -12.365, z: 17.037}
|
||||||
--- !u!1 &903768653
|
--- !u!1 &903768653
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -500,9 +503,17 @@ Camera:
|
||||||
m_projectionMatrixMode: 1
|
m_projectionMatrixMode: 1
|
||||||
m_GateFitMode: 2
|
m_GateFitMode: 2
|
||||||
m_FOVAxisMode: 0
|
m_FOVAxisMode: 0
|
||||||
|
m_Iso: 200
|
||||||
|
m_ShutterSpeed: 0.005
|
||||||
|
m_Aperture: 16
|
||||||
|
m_FocusDistance: 10
|
||||||
|
m_FocalLength: 50
|
||||||
|
m_BladeCount: 5
|
||||||
|
m_Curvature: {x: 2, y: 11}
|
||||||
|
m_BarrelClipping: 0.25
|
||||||
|
m_Anamorphism: 0
|
||||||
m_SensorSize: {x: 36, y: 24}
|
m_SensorSize: {x: 36, y: 24}
|
||||||
m_LensShift: {x: 0, y: 0}
|
m_LensShift: {x: 0, y: 0}
|
||||||
m_FocalLength: 50
|
|
||||||
m_NormalizedViewPortRect:
|
m_NormalizedViewPortRect:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
|
|
@ -542,7 +553,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 2
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!81 &903768658
|
--- !u!81 &903768658
|
||||||
AudioListener:
|
AudioListener:
|
||||||
|
|
@ -583,7 +594,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 3
|
m_RootOrder: 0
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &1099803616
|
--- !u!114 &1099803616
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
|
|
@ -597,7 +608,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
host: vn.ugavel.com
|
host: velnet-demo.ugavel.com
|
||||||
port: 5000
|
port: 5000
|
||||||
udpConnected: 0
|
udpConnected: 0
|
||||||
userid: -1
|
userid: -1
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ NavMeshSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_BuildSettings:
|
m_BuildSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 3
|
||||||
agentTypeID: 0
|
agentTypeID: 0
|
||||||
agentRadius: 0.5
|
agentRadius: 0.5
|
||||||
agentHeight: 2
|
agentHeight: 2
|
||||||
|
|
@ -117,7 +117,7 @@ NavMeshSettings:
|
||||||
cellSize: 0.16666667
|
cellSize: 0.16666667
|
||||||
manualTileSize: 0
|
manualTileSize: 0
|
||||||
tileSize: 256
|
tileSize: 256
|
||||||
accuratePlacement: 0
|
buildHeightMesh: 0
|
||||||
maxJobWorkers: 0
|
maxJobWorkers: 0
|
||||||
preserveTilesOutsideBounds: 0
|
preserveTilesOutsideBounds: 0
|
||||||
debug:
|
debug:
|
||||||
|
|
@ -585,7 +585,9 @@ Canvas:
|
||||||
m_OverrideSorting: 0
|
m_OverrideSorting: 0
|
||||||
m_OverridePixelPerfect: 0
|
m_OverridePixelPerfect: 0
|
||||||
m_SortingBucketNormalizedSize: 0
|
m_SortingBucketNormalizedSize: 0
|
||||||
|
m_VertexColorAlwaysGammaSpace: 0
|
||||||
m_AdditionalShaderChannelsFlag: 0
|
m_AdditionalShaderChannelsFlag: 0
|
||||||
|
m_UpdateRectTransformForStandalone: 0
|
||||||
m_SortingLayerID: 0
|
m_SortingLayerID: 0
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 0
|
||||||
m_TargetDisplay: 0
|
m_TargetDisplay: 0
|
||||||
|
|
@ -749,6 +751,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
m_SendPointerHoverToParent: 1
|
||||||
m_HorizontalAxis: Horizontal
|
m_HorizontalAxis: Horizontal
|
||||||
m_VerticalAxis: Vertical
|
m_VerticalAxis: Vertical
|
||||||
m_SubmitButton: Submit
|
m_SubmitButton: Submit
|
||||||
|
|
@ -1733,9 +1736,17 @@ Camera:
|
||||||
m_projectionMatrixMode: 1
|
m_projectionMatrixMode: 1
|
||||||
m_GateFitMode: 2
|
m_GateFitMode: 2
|
||||||
m_FOVAxisMode: 0
|
m_FOVAxisMode: 0
|
||||||
|
m_Iso: 200
|
||||||
|
m_ShutterSpeed: 0.005
|
||||||
|
m_Aperture: 16
|
||||||
|
m_FocusDistance: 10
|
||||||
|
m_FocalLength: 50
|
||||||
|
m_BladeCount: 5
|
||||||
|
m_Curvature: {x: 2, y: 11}
|
||||||
|
m_BarrelClipping: 0.25
|
||||||
|
m_Anamorphism: 0
|
||||||
m_SensorSize: {x: 36, y: 24}
|
m_SensorSize: {x: 36, y: 24}
|
||||||
m_LensShift: {x: 0, y: 0}
|
m_LensShift: {x: 0, y: 0}
|
||||||
m_FocalLength: 50
|
|
||||||
m_NormalizedViewPortRect:
|
m_NormalizedViewPortRect:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
|
|
@ -2055,7 +2066,7 @@ MonoBehaviour:
|
||||||
prefabName:
|
prefabName:
|
||||||
isSceneObject: 1
|
isSceneObject: 1
|
||||||
syncedComponents:
|
syncedComponents:
|
||||||
- {fileID: 948755939}
|
- {fileID: 0}
|
||||||
--- !u!114 &948755941
|
--- !u!114 &948755941
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -2518,7 +2529,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
host: vn.ugavel.com
|
host: velnet-demo.ugavel.com
|
||||||
port: 5000
|
port: 5000
|
||||||
udpConnected: 0
|
udpConnected: 0
|
||||||
userid: -1
|
userid: -1
|
||||||
|
|
@ -4106,7 +4117,7 @@ MonoBehaviour:
|
||||||
prefabName:
|
prefabName:
|
||||||
isSceneObject: 1
|
isSceneObject: 1
|
||||||
syncedComponents:
|
syncedComponents:
|
||||||
- {fileID: 2021764945}
|
- {fileID: 0}
|
||||||
--- !u!114 &2021764945
|
--- !u!114 &2021764945
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -4372,6 +4383,7 @@ PrefabInstance:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Modification:
|
m_Modification:
|
||||||
|
serializedVersion: 3
|
||||||
m_TransformParent: {fileID: 0}
|
m_TransformParent: {fileID: 0}
|
||||||
m_Modifications:
|
m_Modifications:
|
||||||
- target: {fileID: 3951900052977689805, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
- target: {fileID: 3951900052977689805, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
|
@ -4439,4 +4451,7 @@ PrefabInstance:
|
||||||
value: 0
|
value: 0
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
|
m_RemovedGameObjects: []
|
||||||
|
m_AddedGameObjects: []
|
||||||
|
m_AddedComponents: []
|
||||||
m_SourcePrefab: {fileID: 100100000, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
m_SourcePrefab: {fileID: 100100000, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ NavMeshSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_BuildSettings:
|
m_BuildSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 3
|
||||||
agentTypeID: 0
|
agentTypeID: 0
|
||||||
agentRadius: 0.5
|
agentRadius: 0.5
|
||||||
agentHeight: 2
|
agentHeight: 2
|
||||||
|
|
@ -117,7 +117,7 @@ NavMeshSettings:
|
||||||
cellSize: 0.16666667
|
cellSize: 0.16666667
|
||||||
manualTileSize: 0
|
manualTileSize: 0
|
||||||
tileSize: 256
|
tileSize: 256
|
||||||
accuratePlacement: 0
|
buildHeightMesh: 0
|
||||||
maxJobWorkers: 0
|
maxJobWorkers: 0
|
||||||
preserveTilesOutsideBounds: 0
|
preserveTilesOutsideBounds: 0
|
||||||
debug:
|
debug:
|
||||||
|
|
@ -152,7 +152,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
host: vn.ugavel.com
|
host: velnet-demo.ugavel.com
|
||||||
port: 5000
|
port: 5000
|
||||||
udpConnected: 0
|
udpConnected: 0
|
||||||
userid: -1
|
userid: -1
|
||||||
|
|
@ -301,9 +301,17 @@ BoxCollider:
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 958953873}
|
m_GameObject: {fileID: 958953873}
|
||||||
m_Material: {fileID: 0}
|
m_Material: {fileID: 0}
|
||||||
|
m_IncludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ExcludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_LayerOverridePriority: 0
|
||||||
m_IsTrigger: 0
|
m_IsTrigger: 0
|
||||||
|
m_ProvidesContacts: 0
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
serializedVersion: 2
|
serializedVersion: 3
|
||||||
m_Size: {x: 1, y: 1, z: 1}
|
m_Size: {x: 1, y: 1, z: 1}
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
m_Center: {x: 0, y: 0, z: 0}
|
||||||
--- !u!23 &958953875
|
--- !u!23 &958953875
|
||||||
|
|
@ -386,6 +394,9 @@ MonoBehaviour:
|
||||||
networkObject: {fileID: 958953879}
|
networkObject: {fileID: 958953879}
|
||||||
serializationRateHz: 30
|
serializationRateHz: 30
|
||||||
hybridOnChangeCompression: 1
|
hybridOnChangeCompression: 1
|
||||||
|
position: 1
|
||||||
|
rotation: 1
|
||||||
|
scale: 0
|
||||||
useLocalTransform: 0
|
useLocalTransform: 0
|
||||||
teleportDistance: 0
|
teleportDistance: 0
|
||||||
teleportAngle: 0
|
teleportAngle: 0
|
||||||
|
|
@ -448,9 +459,17 @@ Camera:
|
||||||
m_projectionMatrixMode: 1
|
m_projectionMatrixMode: 1
|
||||||
m_GateFitMode: 2
|
m_GateFitMode: 2
|
||||||
m_FOVAxisMode: 0
|
m_FOVAxisMode: 0
|
||||||
|
m_Iso: 200
|
||||||
|
m_ShutterSpeed: 0.005
|
||||||
|
m_Aperture: 16
|
||||||
|
m_FocusDistance: 10
|
||||||
|
m_FocalLength: 50
|
||||||
|
m_BladeCount: 5
|
||||||
|
m_Curvature: {x: 2, y: 11}
|
||||||
|
m_BarrelClipping: 0.25
|
||||||
|
m_Anamorphism: 0
|
||||||
m_SensorSize: {x: 36, y: 24}
|
m_SensorSize: {x: 36, y: 24}
|
||||||
m_LensShift: {x: 0, y: 0}
|
m_LensShift: {x: 0, y: 0}
|
||||||
m_FocalLength: 50
|
|
||||||
m_NormalizedViewPortRect:
|
m_NormalizedViewPortRect:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
|
|
|
||||||
|
|
@ -616,7 +616,7 @@ RectTransform:
|
||||||
- {fileID: 1020014860}
|
- {fileID: 1020014860}
|
||||||
- {fileID: 1536292193}
|
- {fileID: 1536292193}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 2
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
m_AnchorMax: {x: 0, y: 0}
|
m_AnchorMax: {x: 0, y: 0}
|
||||||
|
|
@ -788,7 +788,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 1
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &498776799
|
--- !u!1 &498776799
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -1319,7 +1319,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 2
|
m_RootOrder: 3
|
||||||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
||||||
--- !u!1 &711524766
|
--- !u!1 &711524766
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -1779,7 +1779,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 3
|
m_RootOrder: 4
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!81 &903768658
|
--- !u!81 &903768658
|
||||||
AudioListener:
|
AudioListener:
|
||||||
|
|
@ -2237,7 +2237,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 5
|
m_RootOrder: 6
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &1020014859
|
--- !u!1 &1020014859
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -2585,7 +2585,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 6
|
m_RootOrder: 0
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &1099803616
|
--- !u!114 &1099803616
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
|
|
@ -2599,7 +2599,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
host: velnet-demo.ugavel.com
|
host: velnet-demo2.ugavel.com
|
||||||
port: 5000
|
port: 5000
|
||||||
udpConnected: 0
|
udpConnected: 0
|
||||||
userid: -1
|
userid: -1
|
||||||
|
|
@ -3251,7 +3251,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 4
|
m_RootOrder: 5
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &1536292192
|
--- !u!1 &1536292192
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ NavMeshSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_BuildSettings:
|
m_BuildSettings:
|
||||||
serializedVersion: 2
|
serializedVersion: 3
|
||||||
agentTypeID: 0
|
agentTypeID: 0
|
||||||
agentRadius: 0.5
|
agentRadius: 0.5
|
||||||
agentHeight: 2
|
agentHeight: 2
|
||||||
|
|
@ -117,7 +117,7 @@ NavMeshSettings:
|
||||||
cellSize: 0.16666667
|
cellSize: 0.16666667
|
||||||
manualTileSize: 0
|
manualTileSize: 0
|
||||||
tileSize: 256
|
tileSize: 256
|
||||||
accuratePlacement: 0
|
buildHeightMesh: 0
|
||||||
maxJobWorkers: 0
|
maxJobWorkers: 0
|
||||||
preserveTilesOutsideBounds: 0
|
preserveTilesOutsideBounds: 0
|
||||||
debug:
|
debug:
|
||||||
|
|
@ -280,7 +280,9 @@ Canvas:
|
||||||
m_OverrideSorting: 0
|
m_OverrideSorting: 0
|
||||||
m_OverridePixelPerfect: 0
|
m_OverridePixelPerfect: 0
|
||||||
m_SortingBucketNormalizedSize: 0
|
m_SortingBucketNormalizedSize: 0
|
||||||
|
m_VertexColorAlwaysGammaSpace: 0
|
||||||
m_AdditionalShaderChannelsFlag: 0
|
m_AdditionalShaderChannelsFlag: 0
|
||||||
|
m_UpdateRectTransformForStandalone: 0
|
||||||
m_SortingLayerID: 0
|
m_SortingLayerID: 0
|
||||||
m_SortingOrder: 0
|
m_SortingOrder: 0
|
||||||
m_TargetDisplay: 0
|
m_TargetDisplay: 0
|
||||||
|
|
@ -517,6 +519,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
|
m_SendPointerHoverToParent: 1
|
||||||
m_HorizontalAxis: Horizontal
|
m_HorizontalAxis: Horizontal
|
||||||
m_VerticalAxis: Vertical
|
m_VerticalAxis: Vertical
|
||||||
m_SubmitButton: Submit
|
m_SubmitButton: Submit
|
||||||
|
|
@ -552,7 +555,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 1
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &513088493
|
--- !u!1 &513088493
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -722,7 +725,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 2
|
m_RootOrder: 3
|
||||||
m_LocalEulerAnglesHint: {x: 25.729, y: -12.365, z: 17.037}
|
m_LocalEulerAnglesHint: {x: 25.729, y: -12.365, z: 17.037}
|
||||||
--- !u!1 &686695937
|
--- !u!1 &686695937
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -987,9 +990,17 @@ Camera:
|
||||||
m_projectionMatrixMode: 1
|
m_projectionMatrixMode: 1
|
||||||
m_GateFitMode: 2
|
m_GateFitMode: 2
|
||||||
m_FOVAxisMode: 0
|
m_FOVAxisMode: 0
|
||||||
|
m_Iso: 200
|
||||||
|
m_ShutterSpeed: 0.005
|
||||||
|
m_Aperture: 16
|
||||||
|
m_FocusDistance: 10
|
||||||
|
m_FocalLength: 50
|
||||||
|
m_BladeCount: 5
|
||||||
|
m_Curvature: {x: 2, y: 11}
|
||||||
|
m_BarrelClipping: 0.25
|
||||||
|
m_Anamorphism: 0
|
||||||
m_SensorSize: {x: 36, y: 24}
|
m_SensorSize: {x: 36, y: 24}
|
||||||
m_LensShift: {x: 0, y: 0}
|
m_LensShift: {x: 0, y: 0}
|
||||||
m_FocalLength: 50
|
|
||||||
m_NormalizedViewPortRect:
|
m_NormalizedViewPortRect:
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
x: 0
|
x: 0
|
||||||
|
|
@ -1029,7 +1040,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 2
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!81 &903768658
|
--- !u!81 &903768658
|
||||||
AudioListener:
|
AudioListener:
|
||||||
|
|
@ -1305,7 +1316,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 3
|
m_RootOrder: 0
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &1099803616
|
--- !u!114 &1099803616
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
|
|
@ -1319,7 +1330,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
host: vn.ugavel.com
|
host: velnet-demo.ugavel.com
|
||||||
port: 5000
|
port: 5000
|
||||||
udpConnected: 0
|
udpConnected: 0
|
||||||
userid: -1
|
userid: -1
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "edu.uga.engr.vel.velnet",
|
"name": "edu.uga.engr.vel.velnet",
|
||||||
"displayName": "VelNet",
|
"displayName": "VelNet",
|
||||||
"version": "1.2.3",
|
"version": "1.3.0",
|
||||||
"unity": "2019.1",
|
"unity": "2019.1",
|
||||||
"description": "A custom networking library for Unity.",
|
"description": "A custom networking library for Unity.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue