Search Unity

DarkRift - Fast and Flexible Cross Platform Networking

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

  1. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Hmm... One other thing I've had in the past which could be related is that when Unity is running in the background it updates significantly slower than when in the foreground. You might find that the other client catches up when you give it focus or you will see a more realistic view if you put the clients on different devices I think.
     
  2. Whackeddie

    Whackeddie

    Joined:
    Mar 30, 2017
    Posts:
    10
    @Jamster I know that DarkRift doesn't support UDP yet until DR2, but I am planning on writing an authoritative server for a realtime space combat game, and I want to know if its realistically possible for me to write with DarkRift and then port to DarkRif2 when it releases. It will rely heavily on client interpolation of other players, and will be based heavily on Valve's Source Engine's networking. UDP is extremely important for my game.
     
  3. Hunkofsteel

    Hunkofsteel

    Joined:
    May 13, 2015
    Posts:
    26
    Hi I am trying to start the external server using code from Unity, well more like C#.
    Code (CSharp):
    1.  
    2.             ProcessStartInfo startInfo = new ProcessStartInfo(Application.dataPath + "/StreamingAssets/DarkRiftServer - Free/DarkRiftServer.exe");
    3.             startInfo.Verb = "runas";
    4.             startInfo.UseShellExecute = true;
    5.             Process.Start(startInfo);
    6.  
    I'm trying to use System.Diagnostics to start the server. I get a
    Question: Is this a security issue in .net or are there arguments that I'm supposed to be passing in?
    I also realize that this is probably not the best place to ask this question since it pertains more to C#, but I'm not sure where to look

    Why I'm doing this is more because I'm working on a project that I've started long ago when the embedded unity server had bugs.

    Edit: If I were to manually start the server, everything works fine.

    Edit 2 : Found out the cause of it. I've had to move the config as well as my plugin files outside of the Unity Asset file in order for it to load. Makes sense once I think of it, but yea....
     
    Last edited: Apr 3, 2017
    Lisk likes this.
  4. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    I suspect you'd be fine to start with DarkRift 1, it follows the same architecture so porting shouldn't be too tricky :)

    I take it you found out that DarkRift loads the settings.cnf file from the current working directory then! You should be able to instruct the Process object where it should set DarkRift's CWD if that makes things easier?
     
  5. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Is there a way we can call DarkRiftAPI.Connect(ip, port) asynchronously?

    Currently, my Unity client freezes up (for about 5 seconds) if it is unable to connect to the server. I want to show an animated UI graphic for "Connecting to server..." while it is trying to connect. However, the animation is frozen since the Connect operation seems to be blocking. Is there a way we can have an asynchronous DarkRiftAPI.Connect method with a callback? (or alternatively, I'd love guidance on how to accomplish what I'm trying to do with the current API)
     
  6. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    514
    I wonder if the other methods of connecting do the same
     
  7. rklausch

    rklausch

    Joined:
    Jun 5, 2016
    Posts:
    10
    i have two initial questions about DarkRift:

    1. are the server plugins able to run monobehaviours in any kind? just saw that the plugin classes are deriving from DarkRift.Plugin...i need that to load datas asyncronously via Coroutines...and i don't want to use an embedded server in the Unity code, i need to use the standalone version.

    2. can i use Visual Studio somehow to write it? i included the both dlls as described in the Plugin Tutorial but still can't derive from a class called DarkRift.Plugin...
     
    Last edited: Apr 4, 2017
  8. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    I recall someone managed to do it with Unity's coroutines but I don't know them well enough to advise. Perhaps look into the .NET ThreadPool and do it that way though you'll have to watch for threading issues in the callback :)

    The standalone system, as the name suggests, is separate form Unity so you can use Monobehaviours in it. You'll have to either use the embedded version or work out a way to do what ever you want in plain old C# :)

    Yes you can, what error are you getting? Could it be just that you're missing the using directive or something simple?

    Jamie
     
  9. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    DarkRift 2 alpha testing signup is now available here!

    If you're not keeping up with the development subscribe to the thread!
     
  10. rklausch

    rklausch

    Joined:
    Jun 5, 2016
    Posts:
    10
    @Jamster thnx for the info...you mean i can't right? (you wrote "you can" actually :) well you may have a dream from time to time :) a standalone server that can handle coroutines for async stuff could be very useful...

    well yeah i tried a lot to get it compiled under VS 2017 but no way...
    i'm getting the an assembly reference error on all of your stuff ( including the Plugin class itself) : error CS0012: The type 'Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly '"mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".

    works fine under Mono so i'm assuming to made nothing wrong here...
     
  11. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Thanks for the answer Jamie; I'll play around with coroutines when I get the chance.

    Another question: I'm calling ConnectionService.Close() from the server. According to the documentation, it says Close() "Close this connection and informs the client" - how does the client get informed? The closest thing I could find was DarkRiftAPI.onPlayerDisconnected but that doesn't seem to fire off when the client is disconnected.

    Edit: additional information: even after calling ConnectionService.Close() on the server, the client thinks DarkRiftAPI.isConnected is true. It only becomes false once I stop the server. Shouldn't it have been disconnected when I called Close() earlier?
     
    Last edited: Apr 4, 2017
  12. DRRosen3

    DRRosen3

    Joined:
    Jan 30, 2014
    Posts:
    683
    Hey Jamie, quick question with a quick answer (I'm sure). I know I've read somewhere before how to know if the request to connect to the server timed out or is rejected. How do I go about detecting the time out (or rejection) in code?

    Edit - Basically I want to write a coroutine that yields until there is a result received whether the connection was successful or not.
     
    Last edited: Apr 5, 2017
  13. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    That's a bug that I've fixed but I don't think I've sent to the store yet!

    I think the best you can do is to check the isConnected property, as I said before (somewhere) it's hard to find out if a connection in the background failed because it's not easy to pie the exception back to the write thread. I would either suggest writing a thread wrapper around Connect in which you can be more thorough with your reporting or perhaps just check for a certain period before assuming!

    Jamie
     
  14. DRRosen3

    DRRosen3

    Joined:
    Jan 30, 2014
    Posts:
    683
    Got it! While my coding knowledge isn't extensive enough to write thread wrappers (whatever those are lol) I can certainly find a workaround (such as yielding for some time, checking the isConnected property, looping back around if its false, and counting the number of times I've checked before failing it). Thanks Jamie!
     
  15. Whackeddie

    Whackeddie

    Joined:
    Mar 30, 2017
    Posts:
    10
    Jamster, I'm trying to make a plugin to make the server more authoritative, but I do not see any methods from the server api to send messages to all players, or other players. I only see SendReply and SendMessage which both send to the person who sent the data to the server. The point is to avoid letting the client have control of where the packets go
     
  16. DRRosen3

    DRRosen3

    Joined:
    Jan 30, 2014
    Posts:
    683
    One more quick question Jamie. Is there a way to make servers send messages to one another? Or to send a message to a connected client forcing them to disconnect from their current server and move over to another one.

    Edit - Basically I want server A to detect that the player wants to move to a different map (server) and then tell server B to get the players data from the database and spawn the player. At first I just though to have server A save the player's current data, then send a message to the player telling them to disconnect and then connect to the new server, but how would the new server know which data (from the database) to retrieve for this player.
     
    Last edited: Apr 5, 2017
  17. Whackeddie

    Whackeddie

    Joined:
    Mar 30, 2017
    Posts:
    10
    I'm having issues finding out how to manually serialise things on the server. I need to send a Vector3 object and I've included the UnityEngine.dll into my server plugin but it's still giving me errors.
     
  18. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    In DarkRift to do that you want to loop through each player that you want to send to (so for all you can just iterate over DarkRiftServer.GetAllConnections()) and call either SendReply or SendNetworkMessage on each to send the message to them. There aren't the shortcut methods in the server because it's too variable :)

    It sounds like you already have a database so the traditional way of doing that would be to pass the client a 'token' which you store in your database related to that player. The client can then reconnect to another server and pass them their username and the one-time token and that verifies they are who they say they are with the database. So no passwords are sent (the token is deleted after so is of no use once used) and you can then get the related data either via token or username :)

    What errors are you getting? Have you put the UnityEngine.dll file in folder with your plugin on the server?
     
    Last edited: Apr 6, 2017
  19. Vytek

    Vytek

    Joined:
    Apr 29, 2016
    Posts:
    51
    Jamster and Lisk like this.
  20. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
  21. madks13

    madks13

    Joined:
    May 8, 2016
    Posts:
    173
    Hello,

    I tried reading the pages in here to get answers to my question but after reading the 2 first pages i realised it would take much more time than asking directly. So i'm sorry if these were already asked. Here goes :

    Context :
    - I'm working on a game that will have multiplayer with player hosted GameServers and a MasterServer used as a lobby. (if you're interested you can find more in here https://forum.unity3d.com/threads/master-server-behaviour-and-limits.460531/)
    - High level systems i've seen (UNET, Photon) seem overcumbered and do not offer enough customization so i get a fast and efficient multiplayer in the game.
    - Your system seems low enough for that but not low enough to ask me to touch sockets directly.

    Questions :
    - What is the purpose of the executable DarkRiftServer.exe when the game itself is supposed to be the server?
    - Can i make an authorative game server using that file?
    - For my needs, the embeded server seems much better. Is it?
    - Given that my game doesn't allow tinkering with the game server part (yes, it will allow some modding), by buying a pro version, will the licence cover the distribution of the game containing DarkRift to players being able to host game servers on private servers? Even with the embeded DarkRift?

    Thanks in advance. I might have some more questions later on.
     
  22. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Hi @madks13, I'm not the author of DarkRift but I can try to answer some questions. Also feel free to join the community Slack; invite is in the first post.

    What is the purpose of the executable DarkRiftServer.exe when the game itself is supposed to be the server?
    DarkRiftServer.exe is basically a bootstrapper that runs your server Plugin. Your server Plugin is basically your "server" - it contains all the logic. The reason it was written this way, I think, is so you can have multiple Plugins. Plugins basically just react to connections/data. If you want, you can ignore DarkRiftServer.exe and write your own Console application to run DarkRiftServer.Bootstrap() - see a couple pages back for the exact parameters I personally use.

    Can i make an authorative game server using that file?
    Yes, your authoritative server would have all the game logic in a Plugin.

    For my needs, the embeded server seems much better. Is it?
    Embedded server is good if you want/need to use Unity. Otherwise, it's faster performance/cleaner logic to use a standalone C# server. Since you mention in your other post, "Everything else, physics, interactions, missions/quests... would be managed by clients" it sounds like you can just use a standalone, non-embedded server.

    Given that my game doesn't allow tinkering with the game server part (yes, it will allow some modding), by buying a pro version, will the licence cover the distribution of the game containing DarkRift to players being able to host game servers on private servers? Even with the embeded DarkRift?
    Will have to wait on @Jamster to answer that one.
     
  23. madks13

    madks13

    Joined:
    May 8, 2016
    Posts:
    173
    Hello,

    thanks for the answers. I did say that i was thinking of making clients do those, but i did agree to not trusting clients, lest i wanted a situation similar to Borderlands where players could copy rare items between them by using simple tricks (this was the easiest one to reproduce, much worse was seen too).

    The reason i asked the first question is because i think the additional executable would become a throttle since all messages would need to go through it instead of directly speaking to the game server. Also, the game IS using Unity. I don't really want to spend more time coding physics that are readily available in Unity. I hoped to use UNET too, but it seems it's still in beta stages, which is why i was looking at alternatives.
     
  24. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Ah, yeah you'll want to use an embedded server, then.
     
  25. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    I've got a question dealing with concurrency.

    Context:
    - In my game, players can "Upgrade" a unit by paying gold. (This sends a message from the client to the server)
    - If they select multiple units, then click "Upgrade," it'll upgrade them all at the same time. (This sends multiple messages from the client to the server)

    Issue:
    I'm running into an issues that result from the fact that multiple upgrade messages are processed concurrently. (thanks to DarkRift's multithreaded implementation).

    The main issue is that suppose a player can afford 1x Upgrade, but he selects 5 units and clicks "Upgrade." When the server receives the messages, it processes them in parallel so it checks whether the player has enough resources in parallel, and they all pass. This results in the server approving 5 upgrades instead of 1.

    Failed solution:
    One solution I tried was enclosing the Upgrade logic in a lock, but then DarkRift started freezing when I think multiple threads were trying to use the same lock.

    Any recommendations?

    Edit 1:
    It may actually not be the lock that is the problem. I tried disabling the lock and I actually still receive the same problem. For whatever reason, DarkRift just stops receiving any messages. Any tips on how to debug?
     
    Last edited: Apr 12, 2017
  26. madks13

    madks13

    Joined:
    May 8, 2016
    Posts:
    173
    If it's not the lock, then maybe paste the code used by the processing method so it can be analyzed?
     
  27. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    @madks13 For your last question, no... You're not allowed to distribute the DarkRift.dll file so if you can't have player hosted servers. You can however do something like Overwatch does (I think) and let players create their own games on your servers (and hence the DLL isn't distributed).

    @Lisk Sounds like a deadlock to me... Double check that there are no ways a deadlock could get in. One solution could be just to put all the data in a single message rather than separate messages?
     
    Lisk likes this.
  28. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    @Jamster what's strange is I just tried removing all locks in the path of execution, and the problem still happens. I used the debugger and inspected threads again to verify this, and none of the Threads were waiting on a lock of any kind. Almost all of the worker threads were waiting on con.SendReply (ConnectionService).

    Edit: I think I found the problem! It was indeed a lock, but in a dll I was using!
     
    Last edited: Apr 12, 2017
    DarkFlameX1 and Jamster like this.
  29. madks13

    madks13

    Joined:
    May 8, 2016
    Posts:
    173
    @Jamster Well that's disapointing. Players being able to make their own private servers is the main reason i'm looking at 3rd party solutions. I obviously won't be using yours then. Thanks for answering though.
     
  30. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Sorry! It's just wasn't designed for it! :)
     
  31. DRRosen3

    DRRosen3

    Joined:
    Jan 30, 2014
    Posts:
    683
    Hey Jamie! Back again! lol So my question today is about the CCU limit. While the server is running, does the CCU count go up and down as players log in and out of the server? Or does it just go up (not going down when they disconnect) until it hits 20?
     
  32. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    It goes back down, since it's concurrent users :)
     
  33. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    514
    Because of difficulty generating a permanent link to Slack, we've gone to Discord. Here is a permanent link:
    https://discord.gg/U7YBX
     
    Jamster and DarkFlameX1 like this.
  34. Whackeddie

    Whackeddie

    Joined:
    Mar 30, 2017
    Posts:
    10
    DarkFlameX1 likes this.
  35. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    514
    DarkFlameX1 likes this.
  36. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    There's a certain irony to that ;)
     
  37. DRRosen3

    DRRosen3

    Joined:
    Jan 30, 2014
    Posts:
    683
    Hey Jamie, what does it mean if a client isn't receiving Replies from the server. The client subscribes to DarkRiftAPI.onData in the OnEnable method of one of its scripts. All the conditions for it to receive the message are there (it's the correct connection.id and the message IS being sent)... I put a debug at the beginning of the client's OnData and the debug isn't printing.

    The only thing I can think of is that I have two servers running. When the client boots up it checks to see if both servers are running by connecting to server #2 (the game) and then disconnecting from it, and then connecting to server #1 (the lobby). I know both connections are valid because of the DarkRift Server log that shows when a client connects and disconnects. I just can't figure out why the client isn't getting messages back.

    The order is...

    DarkRiftAPI.onData += OnData;
    Connect to server #2.
    If connection successful print to screen that server is up.
    else print to screen that server is down.
    Disconnect from server #2 if connected to it.
    Connect to server #1.
    If connection successful allow player to log in.
    else print to screen that the server is down.

    Is it possible that it's unsubscribing from OnData when it disconnects from the first (#2) server?
     
  38. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Shouldn't do, is it only the second server that isn't receiving messages. If it's also the first I've always found OnEnable is not necessarily called when you'd expect it to be so I tend to use Awake/Start if I can.

    In the Disconnect function it doesn't touch the events so anything already subscribed should stay put. If you resubscribe after the disconnection does it fix it?

    Have you tried using 2 DarkRiftConnections instead?

    Jamie
     
  39. DRRosen3

    DRRosen3

    Joined:
    Jan 30, 2014
    Posts:
    683
    So I've tried using 2 DarkRiftConnections and it's still failing to subscribe. Here's the code I'm working with...

    Code (CSharp):
    1.  
    2.     pubic Text server2Status, messageText;
    3.  
    4.     private IEnumerator Start()
    5.     {
    6.         messageText.text = "Attempting to connect to the (GAME NAME HERE) servers...";
    7.  
    8.         yield return new WaitForSecondsRealtime(1.0f);
    9.  
    10.         yield return StartCoroutine(CheckServer(4295, server2Status));
    11.  
    12.         messageText.text = "Attempting to connect to the log in server...";
    13.  
    14.         DarkRiftConnection lobby = new DarkRiftConnection();
    15.         lobby.onData += OnData;
    16.  
    17.         yield return new WaitForSecondsRealtime(1.0f);
    18.  
    19.         try
    20.         {
    21.             lobby.Connect(serverIP, lobbyPort);
    22.         }
    23.         catch(ConnectionFailedException e)
    24.         {
    25.             messageText.text = "A connection with the log in server could not be made at this time.";
    26.             yield break;
    27.         }
    28.  
    29.         if(lobby.isConnected)
    30.         {
    31.             messageText.text = "Connection with the log in server successful.";
    32.             loginRegisterPanel.SetActive(true);
    33.         }
    34.     }
    35.  
    36.     private IEnumerator CheckServer(int port, Text serverStatus)
    37.     {
    38.         DarkRiftConnection test = new DarkRiftConnection();
    39.  
    40.         serverStatus.text = "Checking...";
    41.  
    42.         yield return new WaitForSecondsRealtime(1.0f);
    43.  
    44.         try
    45.         {
    46.             test.Connect(serverIP, port);
    47.         }
    48.         catch(ConnectionFailedException e)
    49.         {
    50.             serverStatus.color = Color.red;
    51.             serverStatus.text = "OFFLINE";
    52.             yield break;
    53.         }
    54.  
    55.         if(DarkRiftAPI.isConnected)
    56.         {
    57.             serverStatus.color = Color.green;
    58.             serverStatus.text = "ONLINE";
    59.             test.Disconnect();
    60.         }
    61.     }
    So according to this code the Start coroutine should run the CheckServer coroutine and stop until the CheckServer coroutine is done, and then carry on. It does just that, but the lobby still isn't subscribing to OnData.
     
  40. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Firstly, on line 55 you've used DarkRiftAPI which you're not connecting anymore! I think you mean test.isConnected :)

    Does lobby.onData definitely work if you remove line 10?
     
  41. DRRosen3

    DRRosen3

    Joined:
    Jan 30, 2014
    Posts:
    683
    Yeah I forgot to change line 55 hear on the forum, but it is changed in my script.

    And no, even removing line 10 lobby.onData still isn't working.
     
  42. Nexam

    Nexam

    Joined:
    May 14, 2016
    Posts:
    28
    @Jamster during the beta of my game, got a weird problem. I have two DR server: A master (login, chat, matchmaking) and a slave (to run games). All with the console version.
    A client never disconnect from the master, even in game, but once i finish a game and go back to the lobby (so on the master), the client seem disconnected sometime, and after a while. There is a internal management from DR kicking the player for inactivity or something?
     
  43. DRRosen3

    DRRosen3

    Joined:
    Jan 30, 2014
    Posts:
    683
    Jamie... I think I might be on to figuring out what was going on. Why is it that sometimes you have to have a script on an object with DarkRiftAPI.Receive() in an Update method in order to receive messages, and other times you don't need .Receive() called to constantly receive messages.
     
  44. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    You will always need DarkRiftAPI.Receive() or DarkRiftConnection.Receive() because that's the point it moves messages from it's internal queue out to the onData event. I'm unsure how you've managed to get it to work without, perhaps there's a call you missed?

    There's no built in system for it, so long as your computer remains accessible you should still be able to connect. Although, TCP will drop the connection after I think around 1 hour? I could also be something to do with your firewalls/NAT, after inactivity they also sometimes close.
     
  45. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    If you haven't seen it, DarkRift Pro is on sale at the moment ;) 20% off :)
     
  46. Hunkofsteel

    Hunkofsteel

    Joined:
    May 13, 2015
    Posts:
    26
    I can't remember how to do this, but can I connect to a public ip address? I just tried to connect to my own ip address (instead of using 127.0.0.1) and it couldn't connect properly. Currently, I can only connect locally. I want to try and connect to my server that is not locally connected.
     
  47. DarkFlameX1

    DarkFlameX1

    Joined:
    Mar 14, 2015
    Posts:
    13
    Did you port forward on the server side? That's probably why.
     
    Jamster likes this.
  48. Hunkofsteel

    Hunkofsteel

    Joined:
    May 13, 2015
    Posts:
    26
    Maybe...but now I'm in the server and its given an error. Its linux btw, so am I supposed to do anything? Not sure since this is my first time in linux and networking...

    Code (CSharp):
    1. Unhandled Exception:
    2. System.ArgumentNullException: Argument cannot be null.
    3. Parameter name: format
    4.   at System.String.FormatHelper (System.Text.StringBuilder result, IFormatProvider provider, System.String format, System.Object[] args) [0x00000] in <filename unknown>:0
    5.   at System.String.Format (IFormatProvider provider, System.String format, System.Object[] args) [0x00000] in <filename unknown>:0
    6.   at System.String.Format (System.String format, System.Object arg0) [0x00000] in <filename unknown>:0
    7.   at System.TermInfoDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
    8.   at System.ConsoleDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
    9.   at System.Console.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
    10.   at DarkRift.Program.OnError (System.String message) [0x00000] in <filename unknown>:0
    11.   at DarkRift.Interface.LogError (System.String message) [0x00000] in <filename unknown>:0
    12.   at DarkRift.Interface.ExecuteCommand (System.String input) [0x00000] in <filename unknown>:0
    13.   at DarkRift.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
    14. [ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentNullException: Argument cannot be null.
    15. Parameter name: format
    16.   at System.String.FormatHelper (System.Text.StringBuilder result, IFormatProvider provider, System.String format, System.Object[] args) [0x00000] in <filename unknown>:0
    17.   at System.String.Format (IFormatProvider provider, System.String format, System.Object[] args) [0x00000] in <filename unknown>:0
    18.   at System.String.Format (System.String format, System.Object arg0) [0x00000] in <filename unknown>:0
    19.   at System.TermInfoDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
    20.   at System.ConsoleDriver.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
    21.   at System.Console.set_ForegroundColor (ConsoleColor value) [0x00000] in <filename unknown>:0
    22.   at DarkRift.Program.OnError (System.String message) [0x00000] in <filename unknown>:0
    23.   at DarkRift.Interface.LogError (System.String message) [0x00000] in <filename unknown>:0
    24.   at DarkRift.Interface.ExecuteCommand (System.String input) [0x00000] in <filename unknown>:0
    25.   at DarkRift.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
    26.  
    27. Unhandled Exception:
    28. System.Net.Sockets.SocketException: The descriptor is not a socket
    29.   at System.Net.Sockets.Socket.Accept () [0x00000] in <filename unknown>:0
    30.   at System.Net.Sockets.Socket+Worker.Accept () [0x00000] in <filename unknown>:0
    pretty sure its linux thats why?

    Edit: Main reason I think its linux and the main program not working because [ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentNullException: Argument cannot be null. Still not sure totally.... After changing the socket used it stopped giving the Socket Unhandled Exception.
     
    Last edited: Apr 24, 2017
  49. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Hmmm, can't say I've seen that error before... Are you definitely using the latest Mono runtime because it seems to be unhappy with the change to the console text colour!
     
  50. lorddanger

    lorddanger

    Joined:
    Aug 8, 2015
    Posts:
    103
    Hello ,
    Are there any simple guide for sync animation over network using darkrift
    Any example like walking etc...


    Update ::
    NeverMind I had done all correct only problem was that my network id was messed up cause I had forgot to remove the old script from the Object
     
    Last edited: Apr 28, 2017
    Jamster likes this.