initial offline mode, added reference docs for message types
parent
593afca4d1
commit
69d0f1bc80
|
|
@ -5,7 +5,7 @@ using UnityEngine;
|
|||
|
||||
namespace VelNet
|
||||
{
|
||||
public static class BinaryWriterExtensions
|
||||
public static partial class BinaryWriterExtensions
|
||||
{
|
||||
#region Writers
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using UnityEngine;
|
|||
using System.Net;
|
||||
using UnityEngine.SceneManagement;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace VelNet
|
||||
{
|
||||
|
|
@ -119,6 +120,8 @@ namespace VelNet
|
|||
public bool connected;
|
||||
private bool wasConnected;
|
||||
private double lastConnectionCheck;
|
||||
private bool offlineMode;
|
||||
private string offlineRoomName;
|
||||
|
||||
public List<NetworkObject> prefabs = new List<NetworkObject>();
|
||||
public NetworkObject[] sceneObjects;
|
||||
|
|
@ -316,7 +319,8 @@ namespace VelNet
|
|||
onlyConnectToSameVersion
|
||||
? $"{Application.productName}_{Application.version}"
|
||||
: $"{Application.productName}",
|
||||
Hash128.Compute(SystemInfo.deviceUniqueIdentifier).ToString()
|
||||
Hash128.Compute(SystemInfo.deviceUniqueIdentifier + Application.productName)
|
||||
.ToString()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -742,137 +746,7 @@ namespace VelNet
|
|||
AddMessage(new ConnectedMessage());
|
||||
while (socketConnection.Connected)
|
||||
{
|
||||
//read a byte
|
||||
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;
|
||||
}
|
||||
}
|
||||
HandleIncomingMessage(reader);
|
||||
}
|
||||
}
|
||||
catch (ThreadAbortException)
|
||||
|
|
@ -882,6 +756,9 @@ namespace VelNet
|
|||
catch (SocketException socketException)
|
||||
{
|
||||
VelNetLogger.Error("Socket exception: " + socketException);
|
||||
VelNetLogger.Error("Switching to offline mode");
|
||||
offlineMode = true;
|
||||
AddMessage(new ConnectedMessage());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
|
@ -891,8 +768,145 @@ namespace VelNet
|
|||
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()
|
||||
{
|
||||
if (offlineMode) return;
|
||||
|
||||
//I don't yet have a UDP connection
|
||||
try
|
||||
{
|
||||
|
|
@ -900,17 +914,14 @@ namespace VelNet
|
|||
Debug.Assert(addresses.Length > 0);
|
||||
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;
|
||||
byte[] buffer = new byte[1024];
|
||||
while (true)
|
||||
{
|
||||
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);
|
||||
|
||||
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>
|
||||
private static bool SendTcpMessage(byte[] message)
|
||||
{
|
||||
if (instance.offlineMode)
|
||||
{
|
||||
instance.FakeServer(message);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Logging.Info("Sent: " + clientMessage);
|
||||
if (instance.socketConnection == null)
|
||||
{
|
||||
|
|
@ -1019,7 +1036,7 @@ namespace VelNet
|
|||
return true;
|
||||
}
|
||||
|
||||
private static byte[] get_be_bytes(int n)
|
||||
private static byte[] GetBigEndianBytes(int n)
|
||||
{
|
||||
return BitConverter.GetBytes(n).Reverse().ToArray();
|
||||
}
|
||||
|
|
@ -1104,10 +1121,10 @@ namespace VelNet
|
|||
MemoryStream stream = new MemoryStream();
|
||||
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)R.Length);
|
||||
writer.Write(R);
|
||||
writer.Write((byte)roomBytes.Length);
|
||||
writer.Write(roomBytes);
|
||||
SendTcpMessage(stream.ToArray());
|
||||
}
|
||||
|
||||
|
|
@ -1168,7 +1185,7 @@ namespace VelNet
|
|||
MemoryStream mem = new MemoryStream();
|
||||
BinaryWriter writer = new BinaryWriter(mem);
|
||||
writer.Write(sendType);
|
||||
writer.Write(get_be_bytes(message.Length));
|
||||
writer.WriteBigEndian(message.Length);
|
||||
writer.Write(message);
|
||||
return SendTcpMessage(mem.ToArray());
|
||||
}
|
||||
|
|
@ -1176,7 +1193,7 @@ namespace VelNet
|
|||
{
|
||||
//udp message needs the type
|
||||
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);
|
||||
SendUdpMessage(toSend, message.Length + 5); //shouldn't be over 1024...
|
||||
return true;
|
||||
|
|
@ -1192,7 +1209,7 @@ namespace VelNet
|
|||
MemoryStream stream = new MemoryStream();
|
||||
BinaryWriter writer = new BinaryWriter(stream);
|
||||
writer.Write((byte)MessageSendType.MESSAGE_GROUP);
|
||||
writer.Write(get_be_bytes(message.Length));
|
||||
writer.WriteBigEndian(message.Length);
|
||||
writer.Write(message);
|
||||
writer.Write((byte)utf8bytes.Length);
|
||||
writer.Write(utf8bytes);
|
||||
|
|
@ -1201,7 +1218,7 @@ namespace VelNet
|
|||
else
|
||||
{
|
||||
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
|
||||
toSend[5] = (byte)utf8bytes.Length;
|
||||
Array.Copy(utf8bytes, 0, toSend, 6, utf8bytes.Length);
|
||||
|
|
@ -1223,14 +1240,14 @@ namespace VelNet
|
|||
|
||||
MemoryStream stream = new MemoryStream();
|
||||
BinaryWriter writer = new BinaryWriter(stream);
|
||||
byte[] R = Encoding.UTF8.GetBytes(groupName);
|
||||
byte[] groupNameBytes = Encoding.UTF8.GetBytes(groupName);
|
||||
writer.Write((byte)6);
|
||||
writer.Write((byte)R.Length);
|
||||
writer.Write(R);
|
||||
writer.Write(get_be_bytes(clientIds.Count * 4));
|
||||
writer.Write((byte)groupNameBytes.Length);
|
||||
writer.Write(groupNameBytes);
|
||||
writer.WriteBigEndian(clientIds.Count * 4);
|
||||
foreach (int c in clientIds)
|
||||
{
|
||||
writer.Write(get_be_bytes(c));
|
||||
writer.WriteBigEndian(c);
|
||||
}
|
||||
|
||||
SendTcpMessage(stream.ToArray());
|
||||
|
|
@ -1490,5 +1507,100 @@ namespace VelNet
|
|||
|
||||
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;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace VelNet
|
||||
|
|
@ -82,12 +83,11 @@ namespace VelNet
|
|||
///
|
||||
/// The length of the byte[] for message is fixed according to the message type
|
||||
/// </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 BinaryReader reader = new BinaryReader(mem);
|
||||
|
||||
//individual message parameters separated by comma
|
||||
VelNetManager.MessageType messageType = (VelNetManager.MessageType)reader.ReadByte();
|
||||
|
||||
if (messageType == VelNetManager.MessageType.Custom)
|
||||
|
|
@ -109,7 +109,7 @@ namespace VelNet
|
|||
return;
|
||||
}
|
||||
|
||||
if (unknown_sender)
|
||||
if (unknownSender)
|
||||
{
|
||||
VelNetLogger.Error("Received non-custom message from player that doesn't exist ");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ NavMeshSettings:
|
|||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
|
|
@ -117,7 +117,7 @@ NavMeshSettings:
|
|||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
accuratePlacement: 0
|
||||
buildHeightMesh: 0
|
||||
maxJobWorkers: 0
|
||||
preserveTilesOutsideBounds: 0
|
||||
debug:
|
||||
|
|
@ -199,7 +199,9 @@ Canvas:
|
|||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
|
|
@ -337,6 +339,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_SendPointerHoverToParent: 1
|
||||
m_HorizontalAxis: Horizontal
|
||||
m_VerticalAxis: Vertical
|
||||
m_SubmitButton: Submit
|
||||
|
|
@ -372,7 +375,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &652307109
|
||||
GameObject:
|
||||
|
|
@ -466,7 +469,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 2
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 25.729, y: -12.365, z: 17.037}
|
||||
--- !u!1 &903768653
|
||||
GameObject:
|
||||
|
|
@ -500,9 +503,17 @@ Camera:
|
|||
m_projectionMatrixMode: 1
|
||||
m_GateFitMode: 2
|
||||
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_LensShift: {x: 0, y: 0}
|
||||
m_FocalLength: 50
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
|
|
@ -542,7 +553,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!81 &903768658
|
||||
AudioListener:
|
||||
|
|
@ -583,7 +594,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 3
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1099803616
|
||||
MonoBehaviour:
|
||||
|
|
@ -597,7 +608,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
host: vn.ugavel.com
|
||||
host: velnet-demo.ugavel.com
|
||||
port: 5000
|
||||
udpConnected: 0
|
||||
userid: -1
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ NavMeshSettings:
|
|||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
|
|
@ -117,7 +117,7 @@ NavMeshSettings:
|
|||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
accuratePlacement: 0
|
||||
buildHeightMesh: 0
|
||||
maxJobWorkers: 0
|
||||
preserveTilesOutsideBounds: 0
|
||||
debug:
|
||||
|
|
@ -585,7 +585,9 @@ Canvas:
|
|||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
|
|
@ -749,6 +751,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_SendPointerHoverToParent: 1
|
||||
m_HorizontalAxis: Horizontal
|
||||
m_VerticalAxis: Vertical
|
||||
m_SubmitButton: Submit
|
||||
|
|
@ -1733,9 +1736,17 @@ Camera:
|
|||
m_projectionMatrixMode: 1
|
||||
m_GateFitMode: 2
|
||||
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_LensShift: {x: 0, y: 0}
|
||||
m_FocalLength: 50
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
|
|
@ -2055,7 +2066,7 @@ MonoBehaviour:
|
|||
prefabName:
|
||||
isSceneObject: 1
|
||||
syncedComponents:
|
||||
- {fileID: 948755939}
|
||||
- {fileID: 0}
|
||||
--- !u!114 &948755941
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -2518,7 +2529,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
host: vn.ugavel.com
|
||||
host: velnet-demo.ugavel.com
|
||||
port: 5000
|
||||
udpConnected: 0
|
||||
userid: -1
|
||||
|
|
@ -4106,7 +4117,7 @@ MonoBehaviour:
|
|||
prefabName:
|
||||
isSceneObject: 1
|
||||
syncedComponents:
|
||||
- {fileID: 2021764945}
|
||||
- {fileID: 0}
|
||||
--- !u!114 &2021764945
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
|
@ -4372,6 +4383,7 @@ PrefabInstance:
|
|||
m_ObjectHideFlags: 0
|
||||
serializedVersion: 2
|
||||
m_Modification:
|
||||
serializedVersion: 3
|
||||
m_TransformParent: {fileID: 0}
|
||||
m_Modifications:
|
||||
- target: {fileID: 3951900052977689805, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||
|
|
@ -4439,4 +4451,7 @@ PrefabInstance:
|
|||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 6e4a023f70e01405e8b249a4488fe319, type: 3}
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ NavMeshSettings:
|
|||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
|
|
@ -117,7 +117,7 @@ NavMeshSettings:
|
|||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
accuratePlacement: 0
|
||||
buildHeightMesh: 0
|
||||
maxJobWorkers: 0
|
||||
preserveTilesOutsideBounds: 0
|
||||
debug:
|
||||
|
|
@ -152,7 +152,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
host: vn.ugavel.com
|
||||
host: velnet-demo.ugavel.com
|
||||
port: 5000
|
||||
udpConnected: 0
|
||||
userid: -1
|
||||
|
|
@ -301,9 +301,17 @@ BoxCollider:
|
|||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 958953873}
|
||||
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_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!23 &958953875
|
||||
|
|
@ -386,6 +394,9 @@ MonoBehaviour:
|
|||
networkObject: {fileID: 958953879}
|
||||
serializationRateHz: 30
|
||||
hybridOnChangeCompression: 1
|
||||
position: 1
|
||||
rotation: 1
|
||||
scale: 0
|
||||
useLocalTransform: 0
|
||||
teleportDistance: 0
|
||||
teleportAngle: 0
|
||||
|
|
@ -448,9 +459,17 @@ Camera:
|
|||
m_projectionMatrixMode: 1
|
||||
m_GateFitMode: 2
|
||||
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_LensShift: {x: 0, y: 0}
|
||||
m_FocalLength: 50
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
|
|
|
|||
|
|
@ -616,7 +616,7 @@ RectTransform:
|
|||
- {fileID: 1020014860}
|
||||
- {fileID: 1536292193}
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
|
|
@ -788,7 +788,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &498776799
|
||||
GameObject:
|
||||
|
|
@ -1319,7 +1319,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 2
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
|
||||
--- !u!1 &711524766
|
||||
GameObject:
|
||||
|
|
@ -1779,7 +1779,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 3
|
||||
m_RootOrder: 4
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!81 &903768658
|
||||
AudioListener:
|
||||
|
|
@ -2237,7 +2237,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 5
|
||||
m_RootOrder: 6
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1020014859
|
||||
GameObject:
|
||||
|
|
@ -2585,7 +2585,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 6
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1099803616
|
||||
MonoBehaviour:
|
||||
|
|
@ -2599,7 +2599,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
host: velnet-demo.ugavel.com
|
||||
host: velnet-demo2.ugavel.com
|
||||
port: 5000
|
||||
udpConnected: 0
|
||||
userid: -1
|
||||
|
|
@ -3251,7 +3251,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 4
|
||||
m_RootOrder: 5
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &1536292192
|
||||
GameObject:
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ NavMeshSettings:
|
|||
serializedVersion: 2
|
||||
m_ObjectHideFlags: 0
|
||||
m_BuildSettings:
|
||||
serializedVersion: 2
|
||||
serializedVersion: 3
|
||||
agentTypeID: 0
|
||||
agentRadius: 0.5
|
||||
agentHeight: 2
|
||||
|
|
@ -117,7 +117,7 @@ NavMeshSettings:
|
|||
cellSize: 0.16666667
|
||||
manualTileSize: 0
|
||||
tileSize: 256
|
||||
accuratePlacement: 0
|
||||
buildHeightMesh: 0
|
||||
maxJobWorkers: 0
|
||||
preserveTilesOutsideBounds: 0
|
||||
debug:
|
||||
|
|
@ -280,7 +280,9 @@ Canvas:
|
|||
m_OverrideSorting: 0
|
||||
m_OverridePixelPerfect: 0
|
||||
m_SortingBucketNormalizedSize: 0
|
||||
m_VertexColorAlwaysGammaSpace: 0
|
||||
m_AdditionalShaderChannelsFlag: 0
|
||||
m_UpdateRectTransformForStandalone: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingOrder: 0
|
||||
m_TargetDisplay: 0
|
||||
|
|
@ -517,6 +519,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_SendPointerHoverToParent: 1
|
||||
m_HorizontalAxis: Horizontal
|
||||
m_VerticalAxis: Vertical
|
||||
m_SubmitButton: Submit
|
||||
|
|
@ -552,7 +555,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_RootOrder: 1
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &513088493
|
||||
GameObject:
|
||||
|
|
@ -722,7 +725,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 2
|
||||
m_RootOrder: 3
|
||||
m_LocalEulerAnglesHint: {x: 25.729, y: -12.365, z: 17.037}
|
||||
--- !u!1 &686695937
|
||||
GameObject:
|
||||
|
|
@ -987,9 +990,17 @@ Camera:
|
|||
m_projectionMatrixMode: 1
|
||||
m_GateFitMode: 2
|
||||
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_LensShift: {x: 0, y: 0}
|
||||
m_FocalLength: 50
|
||||
m_NormalizedViewPortRect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
|
|
@ -1029,7 +1040,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 1
|
||||
m_RootOrder: 2
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!81 &903768658
|
||||
AudioListener:
|
||||
|
|
@ -1305,7 +1316,7 @@ Transform:
|
|||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 3
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &1099803616
|
||||
MonoBehaviour:
|
||||
|
|
@ -1319,7 +1330,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 233344de094f11341bdb834d564708dc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
host: vn.ugavel.com
|
||||
host: velnet-demo.ugavel.com
|
||||
port: 5000
|
||||
udpConnected: 0
|
||||
userid: -1
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "edu.uga.engr.vel.velnet",
|
||||
"displayName": "VelNet",
|
||||
"version": "1.2.3",
|
||||
"version": "1.3.0",
|
||||
"unity": "2019.1",
|
||||
"description": "A custom networking library for Unity.",
|
||||
"keywords": [
|
||||
|
|
|
|||
Loading…
Reference in New Issue