Search Unity

DarkRift - Fast and Flexible Cross Platform Networking

Discussion in 'Assets and Asset Store' started by Jamster, Apr 20, 2015.

  1. Rakinare

    Rakinare

    Joined:
    Feb 1, 2017
    Posts:
    17
    Okay I think I found the problem.

    I always thought the connection was going on fine in general, but although I have entered an IP, it always connected me via localhost.
    For some reason other people can't connect to the server hosted on my PC (not even from a PC, not just mobile) BUT the ports are open and forwarded. I have checked my ports with different port checkers and all told me the port I am using is open + the server itself even gave a connect/disconnect response on 2 of the port checkers.

    Do you have any idea why the game client wouldn't connect to the server from outside?
     
    Last edited: Feb 12, 2017
  2. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    You should be able to replicate this yes, one big DarkRift server might work but I'd be inclined to have a master server as you detailed and then 1 or more game servers that host multiple battles on each :) DarkRift 1 isn't great for automatic scaling at the moment (although I think your master server plugin could probably use the AWS API to open/close new instances actually) but DarkRift 2 should be a little better. Scalability things wont be coming out for a while after I'm afraid just because they're such a large chunk to develop!

    I'd love if you could use DarkRift 2 in your beta!

    Jamie
     
  3. Rakinare

    Rakinare

    Joined:
    Feb 1, 2017
    Posts:
    17
    Hey Jamie, sorry but I really need an answer on my last question, else I can't go on with my project.
    I can't seem to figure it out by myself.
     
  4. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    Sweet !
    Let's give it a try. Tell me what i need to get the Beta of DarkRift 2, if i can avoid Darkrift classic and go straight for the second version, can save me a lot of trouble :p
    Should i order Darkrift unlimited to access it ? (if the beta is already available, i guess so, but i'm not sure)
    About the feature from the master server to redirect to available game server, we need it, so maybe we can help you with this feature, we have to implant it anyway.

    I'm also interested by log management solution & server monitoring, do you have this implanted/in progress on DR2 ?
     
  5. VXPuddiM

    VXPuddiM

    Joined:
    Jan 23, 2017
    Posts:
    10
    I Tried reimporting DarkRift, it didn't work.
     
  6. Rakinare

    Rakinare

    Joined:
    Feb 1, 2017
    Posts:
    17
    I have now put the server on a vserver. Now I am getting a connection refused error. The port is open and it should work. I can't see why it doesn't :/

    Edit: Problem solved! Also working perfectly fine on mobile so far.
     
    Last edited: Feb 13, 2017
  7. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Sorry I missed your question, I didn't see the new page. Glad to here it's working on mobile now though, thanks for confirming!


    Beta isn't out yet, still no eta I'm afraid but I'll release the sign up for alpha pretty soon! I would certainly start development with DarkRift 1 because it shouldn't be too hard to upgrade.

    I can help with the master server if you get stuck with it, post here and I'm sure you'll get responses as well!

    I'm really not sure, what version of Unity are you using so I can test?
     
  8. PhanomGames

    PhanomGames

    Joined:
    Feb 14, 2017
    Posts:
    1
    Consider having a pre-order where we could pay $200~ for a lifetime account (you were considering monthly fees right?), with the understanding that the alpha would have issues/low documentation until release.
     
  9. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Monthly fees are unlikely because I would have to add substantial infrastructure to my website which I can't do realistically. It might change in the future but not maybe till the far future.

    I'm thinking about pricing, I'd like to open alpha as soon as possible but I need to get some documentation ready first!
     
  10. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Gaios or anyone in the same boat, feel free to PM me. I have DarkRift running in my PlayFab server and I'd be happy to share my implementation steps. :)
     
    Jamster likes this.
  11. FalsAlarm

    FalsAlarm

    Joined:
    Dec 12, 2016
    Posts:
    21
    Hello. I'd like to create an online poker game similar to Zynga poker. But instead of flash, I'll use Unity and also DarkRift networking. Can anyone tell me what demo file i should be looking at if I'd like to have 1 main server that all of the clients connect to? I'm a bit confused but i think I'm talking about the embedded server but I'm not sure. please help clarify
     
  12. VXPuddiM

    VXPuddiM

    Joined:
    Jan 23, 2017
    Posts:
    10
    I'm using Unity 5.5.0f3
     
  13. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    For something like a poker game you wont need the embedded server, you'll get much better performance on the standalone server and hence more people per server!

    Which demo file? All of them until you understand DarkRift fully! ;)
    Thanks, I'll try and check it out and see what I can find :)
     
  14. Rakinare

    Rakinare

    Joined:
    Feb 1, 2017
    Posts:
    17
    Hey Jamster, I've got another question :D

    Is it possible that the client can establish a connection to multiple servers?
    I'd like to have a login server, a character server and the actual game server.

    Just that isn't a problem, but I'd like to stay connected to the login server the whole time for setting the time stamps when someone logs off. The problem with that probably would be the disconnecting, since it probably would close all connection, so I guess I have to find a work around not staying connected to the login server for the whole time?
     
  15. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Of course, just use different DarkRiftConnection objects, one for each server you want to connect to :)
     
    Rakinare likes this.
  16. Rakinare

    Rakinare

    Joined:
    Feb 1, 2017
    Posts:
    17
    Nice, awesome, thank you!

    We are getting further and further using DarkRift, which is super awesome. We are most likely going to buy it when DR2 comes out. Super satisfied so far :)

    Edit: Any by other Network Connection object you just mean another GameObject with a new script connecting to another Server, right?
    How do I then handle the DarkRiftApi.Disconnect() part?
    Can I assign there from which server to disconnect? Like DarkRiftApi.Disconnect(IP, Port)?
     
  17. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    No I do mean "DarkRiftConnection" ;)
     
  18. Rakinare

    Rakinare

    Joined:
    Feb 1, 2017
    Posts:
    17
    Ah I see, would you mind explaining me how I would use that? If I just change DarkRiftAPI to DarkRiftConnection I am getting object reference errors but I can't quite figure out how exactly to use it by the documentation.
     
  19. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Just instantiate a new object like so
    Code (csharp):
    1. DarkRiftConnection connection = new DarkRiftConnection()
    Then instead of writing
    Code (csharp):
    1. DarkRiftAPI.xyz
    You'd use
    Code (csharp):
    1. connection.xyz
    Note: done off the top of my head, the constructor arguments may be wrong...
     
  20. Rakinare

    Rakinare

    Joined:
    Feb 1, 2017
    Posts:
    17
    Ahhh now I understand it, thanks alot! Can I define it as public static so I can refer to that connection in other scripts?

    Edit: It seems to work like that. Will it ever restrict me on anything if I use it as public static?

    And sorry for the many questions, I am just completely new to coding and having a hard time to learn if I don't have a tutorial that I can also visually follow and get stuff explained :p
     
    Last edited: Feb 19, 2017
  21. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Nope, you should be fine!
     
    Rakinare likes this.
  22. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    Hi @Jamster
    I'm starting to replace my old network layer by Darkrift, and i run into a strange problem.

    I only send packet to directly to server, so i don't use any distribution method, just SendMessageToServer on the client.
    I work with my own "packet" class, which i serialize/deserialize with DarkRiftWriter/DarkRiftReader.
    But when i deserialize a packet, everything seems to work fine, but at the end of the function, i got an error

    Code client side:

    Code (CSharp):
    1. public void send(BeyondPacket packet)
    2.     {
    3.         using (DarkRiftWriter _writer = new DarkRiftWriter())
    4.         {
    5.             packet.write(_writer);
    6.             DarkRiftAPI.SendMessageToServer((byte)packet.Id, 0, _writer);
    7.         }
    8.     }
    Code server side:

    Code (CSharp):
    1. public void onDataReceived(ConnectionService _connection, ref NetworkMessage _msg)
    2.         {
    3.             _msg.DecodeData();          
    4.             Interface.Log(string.Format("received data from {0}: tag:{1} subject:{2} data:{3}", _connection.id, _msg.tag, _msg.subject, _msg.data));
    5.             //Note: make sure this is thread safe
    6.             if( _msg.data is DarkRiftReader )
    7.             {
    8.                 byte _pckID = _msg.tag;
    9.                 ushort _actorSerial = _msg.subject;
    10.                 try {
    11.                     using (DarkRiftReader reader = (DarkRiftReader)_msg.data)
    12.                     {
    13.                         BeyondPacket _packet = BeyondPacketFactory.getPacket((BeyondPacketID)_pckID);
    14.                         if (_packet != null)
    15.                         {
    16.                             _packet.connection = _connection;
    17.                             _packet.serial = _actorSerial;
    18.                             _packet.read(reader);
    19.                             m_packetQueue.Enqueue(_packet);
    20.                             m_statistics.receivedPackets++;
    21.                         }
    22.                         else
    23.                         {
    24.                             Interface.LogError(String.Format("Packet not found : ({0}){1}", _pckID, (BeyondPacketID)_pckID));
    25.                         }
    26.                     }                  
    27.                 }
    28.                 catch(Exception ex)
    29.                 {
    30.  
    31.                     Interface.LogError(String.Format("Error during reading packet ({0}){1}. Disconnecting client {2}", _pckID, (BeyondPacketID)_pckID, _connection.id));
    32.                     Interface.LogError(ex.Message);
    33.                     _connection.Close();
    34.                 }
    35.             }
    36.             else
    37.             {
    38.                 Interface.LogError("object received is not DarkRiftReader (data:"+(_msg.data != null ? _msg.data.GetType().ToString() :"null")+")." );
    39.             }
    40.  
    41.             Interface.Log("END onDataReceived");
    42.         }
    Note that BeyondMasterPlugin inherit from an abstract class (BeyondChainsPlugin) which inherit from Plugin.
    Is the Inheritance can be an issue ? The code is actually in BeyondChainsPlugin (abstract)
     
  23. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    Ok. Weird stuff here.
    I reworked my code and it's working now.

    Code (CSharp):
    1. public void onDataReceived(ConnectionService _connection, ref NetworkMessage _msg)
    2.         {
    3.             _msg.DecodeData();
    4.             //Note: make sure this is thread safe
    5.             if (_msg.data is DarkRiftReader)
    6.             {
    7.                 byte _pckID = _msg.tag;
    8.                 ushort _actorSerial = _msg.subject;
    9.                 try
    10.                 {
    11.                     BeyondPacket _packet = BeyondPacketFactory.getPacket((BeyondPacketID)_pckID);
    12.                     if (_packet != null)
    13.                     {
    14.                         _packet.connection = _connection;
    15.                         _packet.serial = _actorSerial;
    16.                         using (DarkRiftReader reader = (DarkRiftReader)_msg.data)
    17.                         {
    18.                             _packet.read(reader);
    19.                         }
    20.                         m_packetQueue.Enqueue(_packet);
    21.                         m_statistics.receivedPackets++;
    22.                     }
    23.                     else
    24.                     {
    25.                         Interface.LogError(String.Format("Packet not found : ({0}){1}", _pckID, (BeyondPacketID)_pckID));
    26.                     }
    27.                     _msg.data = null; //wtf?
    28.                 }
    29.                 catch (Exception ex)
    30.                 {
    31.  
    32.                     Interface.LogError(String.Format("Error during reading packet ({0}){1}. Disconnecting client {2}", _pckID, (BeyondPacketID)_pckID, _connection.id));
    33.                     Interface.LogError(ex.Message);
    34.                     _connection.Close();
    35.                 }
    36.             }
    37.             else
    38.             {
    39.                 Interface.LogError("object received is not DarkRiftReader (data:" + (_msg.data != null ? _msg.data.GetType().ToString() : "null") + ").");
    40.             }
    41.         }
    I'm really interested to understand why i need this line to make it work:
    Code (CSharp):
    1. _msg.data = null;
     
    Last edited: Feb 26, 2017
  24. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    Another thing i don't understand, hopefully @Jamster will be able to help.

    Code (CSharp):
    1. connection.Close();
    Doesn't seem to inform the client, or even really disconnect it. It well fire the ConnectionService.onPlayerDisconnect but i still can send packet from client, and i don't have any disconnection message in the client
     
  25. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    I do have another question, so sorry to harass you :)

    I'm trying to find a way to connect a server to another. Basically the game server(s) talking to the master. But i don't see anything to create a connection in the server API, should i use DarkRiftAPI from the unity package ?
     
  26. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    514
    I'd think you'd have the game servers connect to the master server the same as a client would, but you'd write in something that would communicate that it's a server rather than a client, like a key or known IP address.

    I have a question of my own; Is there a latency test built in somewhere? Though not critical, it would be nice to be able to periodically test network lag time.
     
    Last edited: Feb 27, 2017
  27. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Whew! Sorry about the delayed reply, I was away!

    @Nexam The error is thrown because when you leave the onDataReceived message DarkRift tries to forward on your message in the way it was instructed by the client. To do this it needs to reserialize the data in case you made changes but since _msg.data contains a DarkRiftReader it cant (you can only serialise the writers). By setting it to null it can serialise that so it doesn't have any problems! To get around it you just need to repackage any data you want sent back as a DarkRiftWriter.

    connection.Close() should inform the client... I'm not sure why it isn't...

    There's no built in communication between servers, it's perfectly good to just use DarkRiftAPI to connect to a managing server or you could use something like Hazel to communicate between servers. Personally, for anything non-intensive I'd opt for a standard database though.

    @Vedrit There isn't at the moment although it's on my todo list because I agree it would be nice to have!

    Jamie
     
  28. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    @Jamster thank for your answer, i get it :)
    I will investigate about why the connection.Close() doesn't work properly.

    So, about OnDataReceived, if i understand correctly, it's because the server try to automatically reply something (or forward the message to others clients) ?

    However i don't process the packet's instruction in onDataReceived, i just deserialize it, store it a queue (to be thread safe), and dequeue it inside my game logic loop which run in another thread (i didn't use your update() to have more precise turn). So i simply never need to send back anything from OnDataReceived automatically 99.9% of the time.
    Should i change the logic to have a better use of the power of DarkRift or can i just "cut" this auto-reply function so it doesn't try to do automatic stuff ?
    What i do now look like this:
    On client i use this function to send packet:
    Code (CSharp):
    1. DarkRiftAPI.SendMessageToServer
    Is it not supposed to send a message directly to the server without any distribution instruction? That's what i'm confused about.

    Another critical issue for me: Is there a way to run a plugin in debug ? I try different things, but i can't figure it out for now. If you have any tutorial/instruction for this, can be great. I'm a lover of breakpoints
    i figure it out finally. Solution here if someone look for it:
    https://msdn.microsoft.com/en-us/library/605a12zt.aspx


    I guess i will keep harassing you a little this week :D
     
    Last edited: Feb 27, 2017
  29. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    Still investigate about connection.Close()....

    However there is a way to pass a message (string) to explain the reason of the disconnection already built in ?
    I did a extension of ConnectionService to add Disconnect(string message), but maybe there already something similar ?
     
  30. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    So, after some tests...

    Connection.Close() really doesn't work from server...
    And even weirder... The server fire the event "playerdisconnected" well, so i can remove everything related to this player. BUT since the client is not inform, i can still send message to the server !
    So, not that disconnected after all...

    Something annoying too... When i disconnect from the client, it's work, but it inform every others players automatically ?

    I can probably send a packet to inform the client he has been disconnected by the server for some reason. But i don't want any other client to be aware of it. I run a game with a lobby/matchmaking and 1v1 game rooms, a player really don't care if another player, somewhere in another game, disconnected. Is it possible to change this behavior? it's just a waste of bandwidth, especially when we will have 300 or more player connected on the master.


    Another quick one: Is there a way to get the ping from the client (and from the server to a client) ?
     
    Last edited: Feb 27, 2017
  31. DarkFlameX1

    DarkFlameX1

    Joined:
    Mar 14, 2015
    Posts:
    13
    @Nexam You could get the ping with something like this
    Code (CSharp):
    1. ping.Text = new Ping().Send(ip).RoundtripTime.ToString() + "ms";
    It should work I think I used it previously. ip is the server ip.

    Source: http://stackoverflow.com/questions/14616306/how-to-get-your-ping-and-put-it-on-a-label

    EDIT: This from the clientside for something like a scoreboard. From the server I think you should send a custom "ping" message or something and the client once recieved would send a recieved message with timestamp? Then I guess you just find the difference between the start and end. (Off the top of my head :))
     
    Last edited: Feb 28, 2017
    Jamster likes this.
  32. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    514
    I was thinking something similar, but using difference in UTC time
     
  33. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    The issue with Ping() is not every server allow a ping, and as you said, you can't really ping the client.
    I will look into it, see if there is any (security) problem when enable ping response on a server.

    Otherwise, i got a solution similar to yours in mind. Just send a packet to server, server send it back, and see how long it took receive it back. Not hard to do or anything... but it's always better when it's built in the library :p

    I really look forward to have more detail about the Connection.Close() and the part where DarkRift try to automatically send something back when i ask for nothing :p
     
  34. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    @Nexam I think what you want to do is use onServerMessage rather than OnData, you'll only receive server messages and DarkRift wont automatically send anything on (since it's a server message). You're doing things completely authoritatively that's most likely what you want I think.

    Regarding the Close problem, just to clarify:
    1. Are you using an embedded server or console server?
    2. When you close from the server does the server event get called? (Think this was a yes and should be a yes)
    3. When you close from the server does the client event get called? (Think this was a no and should be a no)
    4. If you send a message from the client after disconnecting does it still get received on the server?

    The close system in DarkRift 1 doesn't necessarily behave like you expect it to from a mix of poor initial design and a few awkward bug fixes in the past which have made it worse. When you close from the client, all other clients will be notified through the onPlayerDisconnected event. However, if you close from the server it will silently disconnect the client without informing any other clients (and the client you disconnected wont inform you). The last part there probably counts as a bug but changing it could break people's applications so it's a hard one to fix cleanly, I suppose having separate events would be the best solution and could be implemented quickly.

    Sorry about the delay,

    Jamie
     
  35. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    Thank you so much @Jamster !
    My bad, didn't read the doc close enough, onServerMessage is exactly what i need.

    To answer your question:

    1. Are you using an embedded server or console server?
    => Console server
    2. When you close from the server does the server event get called? (Think this was a yes and should be a yes)
    => Yes
    3. When you close from the server does the client event get called? (Think this was a no and should be a no)
    => No
    4. If you send a message from the client after disconnecting does it still get received on the server?
    => If i close from the server, Yes. What is really weird for me

    What i expect to do with Connection.Close() on server side is:
    => Really disconnected the client (Client disconnect the socket, so i can detect it or fire an event and send the client back to the login page for example).
    => The client received a message about the reason of disconnection (if any). I already add this by doing an extension of ConnectionService.

    Basically i want to kick a client out when i need to. But for some reason, right now, i need to send a packet just before closing the connection to say "Disconnect Yourself" to the client, or it doesn't care...

    Maybe can you just add a SilentKick() function: Just disconnect the client (and tell him) and doesn't tell anyone else about it. Just to make sure this client is really disconnected and can't send any message anymore, unless he connect back again.


    Another question: to prevent weird stuff (like packet hack, false informations and such) can i disable all distribution method? Just to prevent an hacker client to send a message "to everyone" with wrong info. My first guess is to do something like that:
    Code (CSharp):
    1. Constructor()
    2. {
    3.           ConnectionService.onDistribute += onDistribute;
    4. }
    5.  
    6. private bool onDistribute(ConnectionService con, NetworkMessage data)
    7. {
    8.      if (data.distributionMode == (byte)DistributionType.Server)
    9.          return false;
    10.      else
    11.          return true;
    12. }
     
    Last edited: Mar 2, 2017
  36. tequyla

    tequyla

    Joined:
    Jul 22, 2012
    Posts:
    335
    Hello,

    Here the link for DarkRift MMO tutorial by Yasil, i found this week.

    There is also a good guide of UMA with DarkRift, just in case ;)
    I'm at step 4.5 and i discover the guide each day, Yasil began by implementation of basics mechanics.
    I think, this channel is good stuff too for working and raising the knowledge on DarkRift.

    ++
     
    Last edited: Mar 2, 2017
    Jamster likes this.
  37. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    You're right, the close method should certainly stop the client form sending to the server! I'll look into how that's happening since it should be closing the whole TCP connection...

    The code you posted is pretty much what I would recommend :)
     
  38. bmccall1

    bmccall1

    Joined:
    Jul 28, 2013
    Posts:
    120
    Hey quick question - is there a way to do the standalone server without having a window for unity involved? How does this scale to VPS/servers out in the cloud?

    Thanks!
     
  39. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    I can probably answer that if i understood correctly your question.

    1. Yes you can run a standalone server (console) without unity.
    2. You can probably make it work in the cloud and scale automatically, with AWS API for example (if you use AWS).
    For my project i do this (not automated right now): I've got a Master Server and several "Game server" connected to it. The master handle user login, friend chat, and redirect the players to an available game server
     
  40. bmccall1

    bmccall1

    Joined:
    Jul 28, 2013
    Posts:
    120
    How did you extract the server code to run it in console mode?

    I was looking at the CubeDemoEmbeddedServer and thought maybe i could remove some of the unity based stuff and just start it by itself. Or is there standalone server code that will actually compile without mono?

    All i've seen so far is whats in the project I brought in through the Unity Asset store. And yes, I do use AWS. Currently all my back end code is in NodeJS, even my UDP multiplayer server I wrote. But it doesn't have interpolation so I thought i'd be better off using an off the shelf product.

    Btw thank you for helping!
     
  41. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
  42. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    I'm not sure but it sounds like you mean an embedded server not standalone (console). If that's the case then there is a command line flag to Unity that will make it start without graphics. Be aware however, Unity has a memory leak in this mode so you need to disable all renderers (I think that was the solution).

    P.S. Those docs might not be up to date, I'll get the proper website fixed when I have time!
     
  43. bmccall1

    bmccall1

    Joined:
    Jul 28, 2013
    Posts:
    120
    I did find the DarkRiftServer.exe in the zip file - how do i get to the source for that?
     
  44. DarkFlameX1

    DarkFlameX1

    Joined:
    Mar 14, 2015
    Posts:
    13
    If I understand your question you're asking for the source code of the server? I believe Jamster said its not open source. But you can make your own plugins which can pretty much do anything!
     
  45. bmccall1

    bmccall1

    Joined:
    Jul 28, 2013
    Posts:
    120
    Except run on anything other windows lol. The executable in the zip file only runs in windows. And basically every hosting system will be using linux.

    The executable without source for the server is pretty much useless for scaling.
     
  46. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    I guess you can run it with mono under linux. Or there is windows server as well :)
     
  47. bmccall1

    bmccall1

    Joined:
    Jul 28, 2013
    Posts:
    120
    Yeah it would actually be awesome if a scaffold project that ran in mono was available with no unity tie ins at all and it would be up to the dev to compile in linux or whatever and use that as a distribution.

    I guess i'll try and unravel the embedded cubedemo
     
  48. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    The executable is closed source, yes. For scalability, as DarkFlame said, it can be done easily from the plugins by just integrating with the API for whoever's services you are using and spawning/destroying instances etc. from there.

    Yes, DarkRift is recommended to be used on Windows (it's .NET framework based after all) but as mentioned it will run under Mono so you can use it on Linux in the same way.

    So I'd argue that being without source doesn't make it useless :)
     
  49. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    @Jamster did you had time to look at my Connection.Close() problem ?

    Any news about Darkrift 2 beta ?
     
  50. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Not yet sorry. The first half of the tutorial is done (just a test to do), might do a little more on it tonight and alpha signup will be out soonish!