UDP messages working
parent
5d573f6f8d
commit
4bebb9e779
|
|
@ -109,6 +109,7 @@ public class PlayerController : NetworkObject, Dissonance.IDissonancePlayer
|
||||||
byte[] b = Encoding.UTF8.GetBytes(dissonanceID);
|
byte[] b = Encoding.UTF8.GetBytes(dissonanceID);
|
||||||
owner.sendMessage(this, "d", b);
|
owner.sendMessage(this, "d", b);
|
||||||
};
|
};
|
||||||
|
owner.manager.setupMessageGroup("close", closePlayers.ToArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (owner.isLocal)
|
if (owner.isLocal)
|
||||||
|
|
@ -126,7 +127,7 @@ public class PlayerController : NetworkObject, Dissonance.IDissonancePlayer
|
||||||
byte[] lastAudioIdBytes = BitConverter.GetBytes(lastAudioId++);
|
byte[] lastAudioIdBytes = BitConverter.GetBytes(lastAudioId++);
|
||||||
Buffer.BlockCopy(lastAudioIdBytes, 0, toSend, 0, 4);
|
Buffer.BlockCopy(lastAudioIdBytes, 0, toSend, 0, 4);
|
||||||
Buffer.BlockCopy(data.Array, data.Offset, toSend, 4, data.Count);
|
Buffer.BlockCopy(data.Array, data.Offset, toSend, 4, data.Count);
|
||||||
owner.sendGroupMessage(this,"close", "a", toSend);
|
owner.sendGroupMessage(this,"close", "a", toSend, false); //send voice data unreliably
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1820,7 +1820,7 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: 03a4d4e1a7fd74c7ab2eccca4ce168db, type: 3}
|
m_Script: {fileID: 11500000, guid: 03a4d4e1a7fd74c7ab2eccca4ce168db, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
host: neko.ugavel.com
|
host: 127.0.0.1
|
||||||
port: 3290
|
port: 3290
|
||||||
userid: -1
|
userid: -1
|
||||||
room:
|
room:
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Dissonance;
|
using Dissonance;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
public class NetworkManager : MonoBehaviour
|
public class NetworkManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
public enum MessageType { OTHERS=0,ALL=1,OTHERS_ORDERED=2,ALL_ORDERED=3};
|
public enum MessageType { OTHERS=0,ALL=1,OTHERS_ORDERED=2,ALL_ORDERED=3};
|
||||||
|
|
@ -13,10 +15,15 @@ public class NetworkManager : MonoBehaviour
|
||||||
public int port;
|
public int port;
|
||||||
#region private members
|
#region private members
|
||||||
private TcpClient socketConnection;
|
private TcpClient socketConnection;
|
||||||
|
private Socket udpSocket;
|
||||||
|
public bool udpConnected = false;
|
||||||
|
IPEndPoint RemoteEndPoint;
|
||||||
private Thread clientReceiveThread;
|
private Thread clientReceiveThread;
|
||||||
|
private Thread clientReceiveThreadUDP;
|
||||||
public int userid = -1;
|
public int userid = -1;
|
||||||
public string room;
|
public string room;
|
||||||
int messagesReceived = 0;
|
int messagesReceived = 0;
|
||||||
|
|
||||||
public GameObject playerPrefab;
|
public GameObject playerPrefab;
|
||||||
public Dictionary<int, NetworkPlayer> players = new Dictionary<int, NetworkPlayer>();
|
public Dictionary<int, NetworkPlayer> players = new Dictionary<int, NetworkPlayer>();
|
||||||
|
|
||||||
|
|
@ -64,6 +71,11 @@ public class NetworkManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
this.userid = m.sender;
|
this.userid = m.sender;
|
||||||
Debug.Log("joined server");
|
Debug.Log("joined server");
|
||||||
|
|
||||||
|
//start the udp thread
|
||||||
|
clientReceiveThreadUDP = new Thread(new ThreadStart(ListenForDataUDP));
|
||||||
|
clientReceiveThreadUDP.IsBackground = true;
|
||||||
|
clientReceiveThreadUDP.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m.type == 2)
|
if (m.type == 2)
|
||||||
|
|
@ -87,6 +99,8 @@ public class NetworkManager : MonoBehaviour
|
||||||
player.room = m.text;
|
player.room = m.text;
|
||||||
player.manager = this;
|
player.manager = this;
|
||||||
onJoinedRoom(player);
|
onJoinedRoom(player);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //not for me, a player is joining or leaving
|
else //not for me, a player is joining or leaving
|
||||||
|
|
@ -199,6 +213,9 @@ public class NetworkManager : MonoBehaviour
|
||||||
clientReceiveThread = new Thread(new ThreadStart(ListenForData));
|
clientReceiveThread = new Thread(new ThreadStart(ListenForData));
|
||||||
clientReceiveThread.IsBackground = true;
|
clientReceiveThread.IsBackground = true;
|
||||||
clientReceiveThread.Start();
|
clientReceiveThread.Start();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
@ -322,6 +339,8 @@ public class NetworkManager : MonoBehaviour
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
catch (Exception socketException)
|
catch (Exception socketException)
|
||||||
{
|
{
|
||||||
Debug.Log("Socket exception: " + socketException);
|
Debug.Log("Socket exception: " + socketException);
|
||||||
|
|
@ -329,6 +348,74 @@ public class NetworkManager : MonoBehaviour
|
||||||
}
|
}
|
||||||
connected = false;
|
connected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ListenForDataUDP()
|
||||||
|
{
|
||||||
|
//I don't yet have a UDP connection
|
||||||
|
try
|
||||||
|
{
|
||||||
|
RemoteEndPoint = new IPEndPoint(
|
||||||
|
IPAddress.Parse(host), port);
|
||||||
|
udpSocket = new Socket(AddressFamily.InterNetwork,
|
||||||
|
SocketType.Dgram, ProtocolType.Udp);
|
||||||
|
|
||||||
|
udpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
|
||||||
|
udpConnected = false;
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
|
||||||
|
string welcome = userid + ":0:Hello";
|
||||||
|
byte[] data = Encoding.ASCII.GetBytes(welcome);
|
||||||
|
udpSocket.SendTo(data, data.Length, SocketFlags.None, RemoteEndPoint);
|
||||||
|
|
||||||
|
if(udpSocket.Available == 0)
|
||||||
|
{
|
||||||
|
Thread.Sleep(100);
|
||||||
|
Debug.Log("Waiting for UDP response");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
udpConnected = true;
|
||||||
|
while (true) {
|
||||||
|
int numReceived = udpSocket.Receive(buffer);
|
||||||
|
|
||||||
|
string message = Encoding.UTF8.GetString(buffer, 0, numReceived);
|
||||||
|
|
||||||
|
string[] sections = message.Split(':');
|
||||||
|
if(sections[0] == "0")
|
||||||
|
{
|
||||||
|
Debug.Log("UDP connected");
|
||||||
|
}
|
||||||
|
if(sections[0] == "3")
|
||||||
|
{
|
||||||
|
handleMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch(Exception socketException)
|
||||||
|
{
|
||||||
|
Debug.Log("Socket exception: " + socketException);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendUdpMessage(string message)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (udpSocket == null || !udpConnected)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
byte[] data = Encoding.UTF8.GetBytes(message);
|
||||||
|
Debug.Log("Attempting to send: " + message);
|
||||||
|
udpSocket.SendTo(data, data.Length, SocketFlags.None, RemoteEndPoint);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send message to server using socket connection.
|
/// Send message to server using socket connection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -370,14 +457,29 @@ public class NetworkManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
SendNetworkMessage("2:-1");
|
SendNetworkMessage("2:-1");
|
||||||
}
|
}
|
||||||
public void sendTo(MessageType type, string message)
|
public void sendTo(MessageType type, string message, bool reliable=true)
|
||||||
|
{
|
||||||
|
if (reliable)
|
||||||
{
|
{
|
||||||
SendNetworkMessage("3:" + (int)type + ":" + message);
|
SendNetworkMessage("3:" + (int)type + ":" + message);
|
||||||
}
|
}
|
||||||
public void sendToGroup(string group, string message)
|
else
|
||||||
|
{
|
||||||
|
SendUdpMessage(userid + ":3:" + (int)type + ":" + message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void sendToGroup(string group, string message, bool reliable=true)
|
||||||
|
{
|
||||||
|
if (reliable)
|
||||||
{
|
{
|
||||||
SendNetworkMessage("4:" + group + ":" + message);
|
SendNetworkMessage("4:" + group + ":" + message);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SendUdpMessage(userid + ":4:" + group + ":" + message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//changes the designated group that sendto(4) will go to
|
//changes the designated group that sendto(4) will go to
|
||||||
public void setupMessageGroup(string groupname, int[] userids)
|
public void setupMessageGroup(string groupname, int[] userids)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -159,27 +159,27 @@ public class NetworkPlayer : MonoBehaviour
|
||||||
//FindObjectsOfType<NetworkObject>();
|
//FindObjectsOfType<NetworkObject>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendGroupMessage(NetworkObject obj, string group, string identifier, byte[] data)
|
public void sendGroupMessage(NetworkObject obj, string group, string identifier, byte[] data, bool reliable=true)
|
||||||
{
|
{
|
||||||
if (obj == myObject)
|
if (obj == myObject)
|
||||||
{
|
{
|
||||||
manager.sendToGroup(group, "1," + identifier + "," + Convert.ToBase64String(data));
|
manager.sendToGroup(group, "1," + identifier + "," + Convert.ToBase64String(data), reliable);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
manager.sendToGroup(group, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data));
|
manager.sendToGroup(group, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data), reliable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void sendMessage(NetworkObject obj, string identifier, byte[] data)
|
public void sendMessage(NetworkObject obj, string identifier, byte[] data, bool reliable=true)
|
||||||
{
|
{
|
||||||
if (obj == myObject)
|
if (obj == myObject)
|
||||||
{
|
{
|
||||||
manager.sendTo(NetworkManager.MessageType.OTHERS, "1," + identifier +"," + Convert.ToBase64String(data));
|
manager.sendTo(NetworkManager.MessageType.OTHERS, "1," + identifier +"," + Convert.ToBase64String(data), reliable);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
manager.sendTo(NetworkManager.MessageType.OTHERS, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data));
|
manager.sendTo(NetworkManager.MessageType.OTHERS, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data), reliable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue