/// <summary>
    /// Create peer and connect to server
    /// </summary>
    public static RakNet_Peer Connect(string address, int port, int retries, int timeout)
    {
        IntPtr      ptr  = NET_Create();
        RakNet_Peer peer = new RakNet_Peer(ptr);

        int state = NET_StartClient(ptr, address, port, retries, 1400, timeout * 1000);

        if (state == 0)
        {
            peer.address     = address;
            peer.port        = port;
            peer.state       = PeerState.RunAsClient;
            peer.runningTime = 0;

            if (debugLevel >= RakDebugLevel.Low)
            {
                Debug.Log("[Peer] [" + peer.state + "] Connecting to " + address + ":" + port + " with " + retries + " retry count [Timeout: " + timeout + "]");
            }

            return(peer);
        }

        string text = Marshal.PtrToStringAnsi(NET_LastStartupError(peer.ptr));

        if (debugLevel >= RakDebugLevel.Low)
        {
            Debug.LogWarning("[Peer] [" + peer.state + "] Couldn't connect to server " + address + ":" + port + " (" + text + ")");
        }
        peer.state = PeerState.ClientInitFailed;
        peer.Shutdown();
        return(null);
    }
    /// <summary>
    /// Create peer and start server
    /// </summary>
    /// <returns></returns>
    public static RakNet_Peer CreateServer(string address, int port, int maxConnections)
    {
        RakNet_Peer peer = new RakNet_Peer(NET_Create());

        if (NET_StartServer(peer.ptr, address, port, maxConnections) == 0)
        {
            peer.guid           = ulong.MaxValue;
            peer.address        = address;
            peer.port           = port;
            peer.maxConnections = maxConnections;
            peer.state          = PeerState.RunAsServer;
            peer.runningTime    = 0;

            //set the bandwidth so that it is enough for all connections
            //peer.SetBandwidth(MAX_BANDWIDTH*(uint)maxConnections);
            if (debugLevel >= RakDebugLevel.Low)
            {
                Debug.Log("[Peer] [" + peer.state + "] Server started on port " + port + " (max connections: " + maxConnections + ")");
            }
            return(peer);
        }
        string text = Marshal.PtrToStringAnsi(NET_LastStartupError(peer.ptr));

        if (debugLevel >= RakDebugLevel.Low)
        {
            Debug.LogError("[Peer] [" + peer.state + "] Couldn't create server on port " + port + " (" + text + ")");
        }
        peer.state = PeerState.ServerInitFailed;
        peer.Shutdown();
        return(null);
    }
    public bool StartServer(string bind_to_address = "127.0.0.1", int port = 7777, int maxPlayers = 32)
    {
        OnPreServerInit();
        if (server_peer == null)
        {
            server_peer = RakNet_Peer.CreateServer(bind_to_address, port, maxPlayers);

            if (server_peer != null)
            {
                Query.info.maxPlayers = (byte)maxPlayers;
                Query.info.version    = Application.version;
                try
                {
                    Query.Initialize(port + 1);
                }
                catch
                {
                    Debug.LogError("Query initialized failure! Please port " + (port + 1));
                }
                OnServerInitSuccess(bind_to_address, port);
                Debug.Log("Server started -> " + bind_to_address + ":" + port + "    Max Players: " + maxPlayers + "\nGame/Engine version -> " + Application.version + "/" + Application.unityVersion);
                return(true);
            }
            else
            {
                OnServerInitFailed();
                return(false);
            }
        }
        else
        {
            Debug.LogWarning("[Server] Is already running...");
            return(false);
        }
    }
 /// <summary>
 /// Create empty packet with packet id
 /// </summary>
 /// <param name="packet_id"></param>
 public void CreatePacket(RakNet_Peer peer, byte packet_id)
 {
     this.peer      = peer;
     this.packet_id = packet_id;
     this._sz       = 0;
     _receiving     = false;
     _sending       = true;
     OnCreatePacket();
 }
    public void StopServer()
    {
        for (int i = 0; i < connections.Count; i++)
        {
            Kick(connections[i].guid, "Server shutting down!");
        }
        if (server_peer != null)
        {
            OnServerShutdown();
            server_peer.Shutdown();
            server_peer = null;
        }

        Query.Shutdown();
    }
Exemplo n.º 6
0
 public void Connect(string address = "127.0.0.1", int port = 7777, int retries = 10, int timeout = 15)
 {
     if (client_peer == null)
     {
         Timeout           = timeout;
         disconnect_reason = string.Empty;
         client_peer       = RakNet_Peer.Connect(address, port, retries, timeout);
         IsConnecting      = true;
         OnConnecting(address, port);
         OnConnectingEvent?.Invoke(address, port);
     }
     else
     {
         Debug.LogWarning("[Client] Is already running...");
     }
 }
 public RakNet_Packet Unpack(RakNet_Peer peer, ArraySegment <byte> data)
 {
     this.peer  = peer;
     packet_id  = data.Array[0];
     _sz        = peer.incomingBytes - 1;//-1 skip packet id sz
     _receiving = true;
     _sending   = false;
     try
     {
         OnDeserialize();
     }
     catch (Exception ex)
     {
         throw new Exception(GetType().Name + " packet deserialize error! (" + ex.ToString() + ")");
     }
     return(this);
 }
Exemplo n.º 8
0
 public void Disconnect(DisconnectionType disconnectionType = DisconnectionType.Unknown)
 {
     if (client_peer != null)
     {
         client_peer.Shutdown();
         IsConnected = IsConnecting = false;
         if (disconnectionType != DisconnectionType.Unknown)
         {
             OnDisconnected(client_peer.address, client_peer.port, disconnectionType, disconnect_reason);
             OnDisconnectedEvent?.Invoke(client_peer.address, client_peer.port, disconnectionType, disconnect_reason);
         }
         else if (disconnectionType == DisconnectionType.Unknown)
         {
             OnDisconnected(client_peer.address, client_peer.port, DisconnectionType.ByUser, string.Empty);
             OnDisconnectedEvent?.Invoke(client_peer.address, client_peer.port, DisconnectionType.ByUser, string.Empty);
         }
         if (RakNet_Peer.debugLevel >= RakDebugLevel.Low)
         {
             Debug.Log("[Client] Disconnected... (" + disconnectionType + ")");
         }
         client_peer = null;
     }
 }