void RegistNewAutonomousObject(ClientDataContainer client, ReplicatiorBase replicatior, string PrefabName)
 {
     RegistNewReplicationObject(replicatior, PrefabName);
     replicatior.OwnerNetId = client.NetworkId;
     client.AutonomousObjects.Add(replicatior);
     OnNewAutonomousObjectAdded?.Invoke(replicatior);
 }
    /// <summary>
    /// manually call is not recommended
    /// </summary>
    public void ServerTick()
    {
        if (ClientDataList.Count < 1)
        {
            return;
        }

        ClientDataList.ForEach((c) =>
        {
            if (c.TcpSocket.Available > 0)
            {
                c.TcpSocket.Client.Receive(buffer);
                Debug.Log("Tcp Received : " + encoding.GetString(buffer));
                DecompClientRequest(buffer, c);
                if (OnTcpPacketReceived != null)
                {
                    OnTcpPacketReceived.Invoke(buffer, c);
                }
            }
        });
        if (UdpSocket.Available > 0)
        {
            IPEndPoint endPoint  = null;
            byte[]     Udpbuffer = UdpSocket.Receive(ref endPoint);
            Debug.Log("Udp Received : " + encoding.GetString(Udpbuffer));
            ClientDataContainer client = ClientDataList.Find((c) => c.address == endPoint.Address);
            DecompClientAutonomousData(Udpbuffer, client);
            if (OnUdpPacketReceived != null)
            {
                OnUdpPacketReceived.Invoke(Udpbuffer, client);
            }
        }
        Replicate();
    }
Esempio n. 3
0
    void OnClientDisconnected(ClientDataContainer client)
    {
        ClientUIController uIController = clientUIs.Find((ui) => ui.clientDataContainer.address == client.address);

        clientUIs.Remove(uIController);
        Destroy(uIController.gameObject);
    }
 public void DisconnectClient(ClientDataContainer client)
 {
     SendTcpPacket(client, "Kicked");
     if (ClientDataList.Contains(client))
     {
         ClientDisconnected(client);
     }
 }
Esempio n. 5
0
    private void OnReceivedMessage(byte[] data, ClientDataContainer clientData)
    {
        Debug.Log("new");
        GameObject         obj          = Instantiate(ClientUIPrefab, ContentPanel.transform);
        ClientUIController uIController = obj.GetComponent <ClientUIController>();

        uIController.Initialize(server, clientData);
        clientUIs.Add(uIController);
    }
    void DecompClientRequest(byte[] data, ClientDataContainer client)
    {
        string datastr = encoding.GetString(data);

        string[] vs = datastr.Contains('$') ? datastr.Split('$') : new string[] { datastr };
        foreach (string s in vs)
        {
            ClientRequest(s, client);
        }
    }
 void ClientDisconnected(ClientDataContainer client)
 {
     ClientDataList.Remove(client);
     OnClientDisconnected?.Invoke(client);
     client.AutonomousObjects.ForEach((r) =>
     {
         DestroyReplicatedObject(r.Id);
     });
     Debug.Log("Client Disconnected : " + client.address);
 }
    void SendInitialMessage(ClientDataContainer client)
    {
        string InitRepData = "Assign," + client.NetworkId + "$";

        RepObjects.ForEach((obj) =>
        {
            InitRepData += "NewRepObj" + "," + obj.RepPrefabName + "," + Serializer.Vector3ToString(obj.transform.position) + "," +
                           Serializer.Vector3ToString(obj.transform.eulerAngles) + "," + obj.transform.parent.gameObject.name + "," + obj.Id + "," + obj.OwnerNetId + "$";
        });
        SendTcpPacket(client, encoding.GetBytes(InitRepData));
    }
 public void SendTcpPacket(ClientDataContainer client, byte[] data)
 {
     try
     {
         client.TcpSocket.Client.Send(data);
     }
     catch
     {
         ClientDisconnected(client);
     }
 }
    void ClientRequest(string request, ClientDataContainer client)
    {
        string[] vs = request.Contains(',') ? request.Split(',') : new string[] { request };
        switch (vs[0])
        {
        case "NewAutoObj":
            CreateAutonomousPrefab(vs[1], vs[2], Serializer.StringToVector3(vs[3], vs[4], vs[5]), Serializer.StringToVector3(vs[6], vs[7], vs[8]), vs[9], client);
            break;

        case "DestAutoObj":
            RepObjPairs.TryGetValue(int.Parse(vs[1]), out ReplicatiorBase replicatior);
            if (client.AutonomousObjects.Contains(replicatior))
            {
                DestroyReplicatedObject(int.Parse(vs[1]));
            }
            break;

        case "Init":
            SendInitialMessage(client);
            break;

        case "RPWCOS":     //WideRange RPC On Server
            ProcessRPC_Wide(vs[1], vs[2], vs[3]);
            break;

        case "RPWCOC":     //WideRange RPC On Client
            HandOutRPC_Wide(byte.Parse(vs[1]), vs[2], vs[3], vs[4]);
            break;

        case "RPWCMC":     //MultiCast WideRange RPC
            MultiCastRPC_Wide(vs[1], vs[2], vs[3]);
            break;

        case "RPCOS":     //RPC On Server
            ProcessRPC(int.Parse(vs[1]), vs[2], vs[3]);
            break;

        case "RPCOC":     //RPC On Client
            HandOutRPC(byte.Parse(vs[1]), vs[2], vs[3], vs[4]);
            break;

        case "RPCMC":     //MultiCast RPC
            MultiCastRPC(vs[1], vs[2], vs[3]);
            break;

        case "Disconnect":
            ClientDisconnected(client);
            break;

        default:
            OnTcpMessageReceived?.Invoke(encoding.GetBytes(request), client);
            break;
        }
    }
 public void SendTcpPacket(ClientDataContainer client, string data)
 {
     try
     {
         client.TcpSocket.Client.Send(encoding.GetBytes(data));
     }
     catch
     {
         ClientDisconnected(client);
     }
 }
    void AcceptedClientCallback(System.IAsyncResult ar)
    {
        Debug.Log("Server: Client Connected");
        TcpClient           client = (ar.AsyncState as TcpListener).EndAcceptTcpClient(ar);
        ClientDataContainer c      = new ClientDataContainer()
        {
            TcpSocket = client, address = ((IPEndPoint)client.Client.RemoteEndPoint).Address, AutonomousObjects = new List <ReplicatiorBase>(), NetworkId = NetIdBuffer++
        };

        Debug.Log("Client IPAddress : " + c.address);
        ClientDataList.Add(c);
        OnNewClientConnected?.Invoke(c);
    }
 byte[] CreateReplicationData(ClientDataContainer client)
 {
     byte[] data = new byte[0];
     RepObjects.ForEach((obj) =>
     {
         if (obj.DoesClientNeedReplication(client))
         {
             byte[] vs = obj.GetReplicationData();
             if (vs != null)
             {
                 data = data.Concat(encoding.GetBytes(obj.Id + ":")).Concat(vs).Concat(encoding.GetBytes("$")).ToArray();
             }
         }
     });
     return(data);
 }
    void DecompClientAutonomousData(byte[] data, ClientDataContainer client)
    {
        string datastr = encoding.GetString(data);

        string[] vs = datastr.Contains('$') ? datastr.Split('$') : new string[] { datastr };
        foreach (string s in vs)
        {
            if (s.Length < 1)
            {
                return;
            }
            if (s.IndexOf(':') < 0)
            {
                return;
            }
            int Id = int.Parse(s.Substring(0, s.IndexOf(':')));
            HandOutAutonomousData(Id, encoding.GetBytes(s.Substring(s.IndexOf(':') + 1)));
        }
    }
Esempio n. 15
0
 void OnClientConnected(ClientDataContainer client)
 {
     UpdateUI();
 }
    void CreateAutonomousPrefab(string PrefabName, string ObjName, Vector3 pos, Vector3 eular, string ParentObjName, ClientDataContainer Owner)
    {
        string     path = "Prefabs/" + PrefabName;
        GameObject Pobj = (GameObject)Resources.Load(path), parentobj = GameObject.Find(ParentObjName), obj;

        if (parentobj != null)
        {
            obj = Instantiate(Pobj, pos, Quaternion.Euler(eular.x, eular.y, eular.z), parentobj.transform);
        }
        else
        {
            obj = Instantiate(Pobj, pos, Quaternion.Euler(eular.x, eular.y, eular.z));
        }
        ReplicatiorBase replicatior = obj.GetComponent <ReplicatiorBase>();

        if (replicatior == null)
        {
            Debug.Log("CreatingAutonomousPrefab Request Refused! Attach Replicator To Prefab!");
            Destroy(obj);
            return;
        }

        RegistNewAutonomousObject(Owner, replicatior, PrefabName);
        ClientDataList.ForEach((c) =>
        {
            if (c.TcpSocket != Owner.TcpSocket)
            {
                SendTcpPacket(c, encoding.GetBytes("NewRepObj," + PrefabName + "," + Serializer.Vector3ToString(pos) + "," + Serializer.Vector3ToString(eular) + "," + ParentObjName + "," + replicatior.Id));
            }
            else
            {
                SendTcpPacket(c, encoding.GetBytes("AutoObjAdded," + ObjName + "," + replicatior.Id));
            }
        });
    }
Esempio n. 17
0
 /// <summary>
 /// Available Only On Server. if override this function , Dont forget about AutonomousCheck{client.AutonomousObjects.Contains(this)}.
 /// </summary>
 /// <param name="client"></param>
 /// <returns></returns>
 public virtual bool DoesClientNeedReplication(ClientDataContainer client)
 {
     return(!client.AutonomousObjects.Contains(this));
 }
 void SendFile(ClientDataContainer client, string FilePath)
 {
     client.TcpSocket.Client.SendFile(FilePath);
 }
Esempio n. 19
0
 public override bool DoesClientNeedReplication(ClientDataContainer client)
 {
     return(Prepos != transform.position && !IsAutonomousObject());
 }
Esempio n. 20
0
 // Start is called before the first frame update
 public void Initialize(NetworkManager_Server server, ClientDataContainer clientData)
 {
     clientDataContainer = clientData;
     Server = server;
 }