fishbait/UnityProject/Assets/FishBait/FishBaitDirectConnectModule.cs
NIMFER bf403a8f97 Ducktaped together a FishNet version of the Transport
Ducktaped together a FishNet version of the Transport, now I need to edit the LoadBalancer and Server so it connects and actually trades information
2022-08-14 03:55:25 +02:00

180 lines
No EOL
4.6 KiB
C#

using FishNet.Transporting;
using System;
using System.Collections.Generic;
using UnityEngine;
using FishBait;
[RequireComponent(typeof(FishBaitTransport))]
public class FishBaitDirectConnectModule : MonoBehaviour
{
[HideInInspector]
public Transport directConnectTransport;
public bool showDebugLogs;
private FishBaitTransport fishBaitTransport;
private int connectionId;
void Awake()
{
fishBaitTransport = GetComponent<FishBaitTransport>();
if (directConnectTransport == null)
{
Debug.Log("Direct Connect Transport is null!");
return;
}
if (directConnectTransport is FishBaitTransport)
{
Debug.Log("Direct Connect Transport Cannot be the relay, silly. :P");
return;
}
directConnectTransport.OnServerConnectionState += ServerConnectionState;
directConnectTransport.OnServerReceivedData += ServerDataRecived;
directConnectTransport.OnClientConnectionState += ClientConnectionState;
directConnectTransport.OnClientReceivedData += ClientDataRecived;
}
void RemoteConnectionState(RemoteConnectionStateArgs args)
{
connectionId = args.ConnectionId;
}
void ServerConnectionState(ServerConnectionStateArgs args)
{
switch (args.ConnectionState)
{
case LocalConnectionState.Started:
OnServerConnected(connectionId);
break;
case LocalConnectionState.Stopped:
OnServerDisconnected(connectionId);
break;
}
}
void ServerDataRecived(ServerReceivedDataArgs args)
{
OnServerDataReceived(args.ConnectionId, args.Data, ((int)args.Channel));
}
void ClientConnectionState(ClientConnectionStateArgs args)
{
switch (args.ConnectionState)
{
case LocalConnectionState.Started:
OnClientConnected();
break;
case LocalConnectionState.Stopped:
OnClientDisconnected();
break;
}
}
void ClientDataRecived(ClientReceivedDataArgs args)
{
OnClientDataReceived(args.Data, ((int)args.Channel));
}
public void StartServer(int port)
{
if (port > 0)
SetTransportPort(port);
directConnectTransport.StartConnection(true);
if (showDebugLogs)
Debug.Log("Direct Connect Server Created!");
}
public void StopServer()
{
directConnectTransport.StopConnection(true);
}
public void JoinServer(string ip, int port)
{
if (SupportsNATPunch())
SetTransportPort(port);
directConnectTransport.SetClientAddress(ip);
directConnectTransport.StartConnection(false);
}
public void SetTransportPort(int port)
{
directConnectTransport.SetPort((ushort)port);
}
public int GetTransportPort()
{
return directConnectTransport.GetPort();
}
public bool SupportsNATPunch()
{
return directConnectTransport is kcp2k.KcpTransport;
}
public bool KickClient(int clientID)
{
if (showDebugLogs)
Debug.Log("Kicked direct connect client.");
directConnectTransport.StopConnection(clientID, true);
return true;
}
public void ClientDisconnect()
{
directConnectTransport.StopConnection(false);
}
public void ServerSend(int clientID, ArraySegment<byte> data, int channel)
{
directConnectTransport.SendToClient((byte)channel, data, clientID);
}
public void ClientSend(ArraySegment<byte> data, int channel)
{
directConnectTransport.SendToServer((byte)channel, data);
}
#region Transport Callbacks
void OnServerConnected(int clientID)
{
if (showDebugLogs)
Debug.Log("Direct Connect Client Connected");
fishBaitTransport.DirectAddClient(clientID);
}
void OnServerDataReceived(int clientID, ArraySegment<byte> data, int channel)
{
fishBaitTransport.DirectReceiveData(data, channel, clientID);
}
void OnServerDisconnected(int clientID)
{
fishBaitTransport.DirectRemoveClient(clientID);
}
void OnClientConnected()
{
if (showDebugLogs)
Debug.Log("Direct Connect Client Joined");
fishBaitTransport.DirectClientConnected();
}
void OnClientDisconnected()
{
fishBaitTransport.DirectDisconnected();
}
void OnClientDataReceived(ArraySegment<byte> data, int channel)
{
fishBaitTransport.DirectReceiveData(data, channel);
}
#endregion
}