Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

Program Announcements / MikeNet - Multiplayer Plugin

Author
Message
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 16th Mar 2009 20:30
I'll look over my code again to refresh my memory, but I was sure that's what happened.

Hayer
18
Years of Service
User Offline
Joined: 4th Nov 2005
Location: Norway
Posted: 17th Mar 2009 09:07
The client never freezes, it is the server which freezes/hangs when the client call mnConnect

It returns a "-1" saying that it don't know what happend but it is mostlikely cause the packet dont exist.

Keep it simple.
Questions? Mail me
Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 17th Mar 2009 09:47 Edited at: 17th Mar 2009 09:55
What is "it"? I'm guessing mnAddStringC? Perhaps the string you are passing to it is invalid; it must be a null terminated string if the length parameter is 0.

You could also try commenting out individual lines of your join code until you don't get a crash; that way you know what the cause is.


[edit]
Perhaps when your strings are not filled they are set to NULL (0)?
mnAddStringC will generate the error you are talking about in the following code example:


To get around this you should do the following:
Hayer
18
Years of Service
User Offline
Joined: 4th Nov 2005
Location: Norway
Posted: 17th Mar 2009 13:35 Edited at: 17th Mar 2009 13:43
The server crashes when the client call mnConnect, do I suck that hard at explaining or is it my english? :/


Mh-m, here is a image



Edit: Its high-resolution to be sure that everyone is able to read the text

Keep it simple.
Questions? Mail me
Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 17th Mar 2009 14:00 Edited at: 17th Mar 2009 14:00
Are you using UDP mode catch all? If so, set the maximum number of operations in mnStartServer to 1 and the problem should be solved; I have fixed this for the next version.

If that didn't help, you can email me your code and I will debug it for you.
Hayer
18
Years of Service
User Offline
Joined: 4th Nov 2005
Location: Norway
Posted: 18th Mar 2009 13:55 Edited at: 18th Mar 2009 13:56
Im using; int UdpMode = UDPMODE_PER_CLIENT_PER_OPERATION; so guess no ;p


Changing it to 1 didnt work :/

Keep it simple.
Questions? Mail me
Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 18th Mar 2009 16:19 Edited at: 18th Mar 2009 16:38
I have an idea as to why you get the error message about mnRecvUDP. The following code generates the error:


and to fix this you should check that the client is connected to the server before trying to receive data:


As for the server crashing, I can't tell you what the cause is without seeing the full code. You can email this to me if you want me to check it for you but from what you have said it looks like your code is to blame, specifically the code executed when a new client joins.


For those of you who are eagerly awaiting the next version, here is an update on the progress. I have signed a contract with TGC about selling it on their website and have sent off the files. I am now waiting for them to create a web page for MikeNet; when MikeNet is available for purchase I will post here.
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 18th Mar 2009 17:12 Edited at: 18th Mar 2009 17:13
Also, don't forget that when you are specifying the operation to receive, it has to be one less then the maximum operations.

In DBPro code, (cuz that's what I'm using..)



KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 18th Mar 2009 21:29 Edited at: 18th Mar 2009 22:02
Mike,

I'm wrestling with a few logistics problems with my program. Trying to find the best way to get data from Point A to Point B as it were.

Let's say you have a game where up to 300 players can be on the server, and there are 100 NPCs also on the server.

Using UDP, the server needs to send Position and Rotation data to the players.

The obvious choice (correct me if I'm wrong) would be to use Per Client Per Operation mode, and that works fine for player movements
because you are guaranteed that a packet will be there for each and every player. (sooner or later) But what about the NPCs? The only
way to guarantee that their movement data doesn't get overwritten is to assign a different Operation ID to each NPC.

The problem is, with that method your main loop has this hunk of code to push through.

Which means that it's doing 400 Packet checks every loop.

At the moment this slows my main loop from 60 FPS down to 17.

If there's a different/more efficient way to do this?

In the new version, is the response from mnRecvUDP any faster even if there isn't a packet waiting?

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 18th Mar 2009 22:21 Edited at: 18th Mar 2009 22:26
Quote: "In the new version, is the response from mnRecvUDP any faster even if there isn't a packet waiting?"

No, it is already as fast as is possible

Quote: "If there's a different/more efficient way to do this?"

This is where mnSetFunction would come in handy but unfortunately this is only compatible with C++.

In this case, it is probably faster to use UDP mode catch all because you would only be polling on one packet store instead of 30,000 per tick (which is my estimate of what you are currently doing ). You may experience a backlog of packets though so you might want to limit the number of packets sent per second. If you do use UDP mode catch all make sure you set the maximum number of operations to 1 when using mnStartServer (this is fixed in the next version).
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 18th Mar 2009 22:53 Edited at: 19th Mar 2009 00:20
Ok, fair enough.

What I'm attempting at the moment is to break up the task between loops. I set a loop counter to count to 4 and reset.

On loop 1 I process players 1-100, loop 2, 101-200, loop 3, 201-300 and on loop 4 the 100 operations from player 0. (the server)

I'm almost done making that change. I'll let you know how it goes. Since I'm doing 60 loops a second, that should be fast enough to deal with the incoming packets.

Quote: "instead of 30,000 per tick"


I was using the variable lastOp to check 100 operations for the server, but only 1 operation for the clients. 30,000 would have
really crushed the framerate.

While looking at my code I also realized I had a check in there that didn't even allow the packet to be checked if I didn't already
have a data record for the player. So the slowness isn't even due to mnRecvUDP, it's just the size of the loop. So hopefully breaking
it up into smaller chunks will help.

[Edit / Update]
Using the loop counter method to spread the workload out over several loops has really helped a lot. I also used it to run my
lens flare subroutine every 3rd loop, and got an additional performance boost with no adverse effects on the lens flare.

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 19th Mar 2009 00:33
Ah I see what you're doing now, that is a good way of reducing the work load. I'm glad you have managed to improve the performance
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 19th Mar 2009 00:50
Me too. It's hard enough keeping the framerate up with everything that's going on in this game.

The amount of data being shuffled back and forth for a game this size is amazing..

Hayer
18
Years of Service
User Offline
Joined: 4th Nov 2005
Location: Norway
Posted: 19th Mar 2009 01:10
so ur sending ur npcs pos, rot, ani data to each player each loop?

what I would do was to add a boolean like bUpdate.
This boolean changes each time
-the npc finishes hes task
-it react to something/someone nearby
and only send out waypoints, so could the client do all the visual stuff(but the server is still the master over collision etc)

Keep it simple.
Questions? Mail me
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 19th Mar 2009 01:17
That's sort of what I'm doing.

The NPCs are almost always in motion.

Their position and rotation are sent every 2 seconds, but only if the player is within range. If the NPC is more than 120,000 away
the update isn't sent.

vocebello
19
Years of Service
User Offline
Joined: 30th Dec 2004
Location: Toronto, Canada
Posted: 19th Mar 2009 07:36
I just wanted to say thanks Mike. I'm using your beautiful dll in my FPS project, and I haven't had any problems. I'm learning as I go, but so far, I send player locations, direction, along with player names, scores, etc.

Just wanted to say thanks for making my life easier.

[ freelance DarkGDK coder ]
Hayer
18
Years of Service
User Offline
Joined: 4th Nov 2005
Location: Norway
Posted: 19th Mar 2009 21:24
Help, still the same error msg as earlier, and yes, I am checking that the client is connected.

serverside


Keep it simple.
Questions? Mail me
Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 19th Mar 2009 21:36
I can't see anything wrong with that code snippet but it is possible that I've missed something. Without seeing your full code its hard to tell what the problem is. I'm guessing here, but perhaps:
1. The 'Clients' array is not big enough, it should have MaxClients+1 elements.
2. The SC commands are faulty.

Because this is C++ it is easy for a mistake to cause adverse effects in other unrelated parts of the program.
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 21st Mar 2009 03:53 Edited at: 21st Mar 2009 03:54
I'm running into a bit of a problem with a certain scenario.

I have the following setup.

Data Server
- Runs 3 instances. (all server mode)
1 for talking with the Monitor application
1 for talking with the Game Server(s)
1 for Logins

Game Server
- Runs 2 instances.
1 for talking with the data server (client mode)
1 for talking with the players (server mode)

Game Client
- Runs 1 instance. (client mode)
Talks with the Data server for logging in and character creation/selection
Talks with the Game server once the player has logged in and picked a character

The problem is that some packets aren't making it through.

The data server is the one "in charge". If a player picks a contract to take on, the request is sent to the game server, and
forwarded to the data server. If the contract is available, then the response is sent back to the game server and forwarded to the
client. However I've witnessed the packets make it through, but only intermittently. A request will be sent from the client to the
game server, and never make it to the data server. OR the request will make it to the data server, and the response will make it to
the game server, but the client never receives it.

One thought that I had was I'm using the same packets for both instances on the game server. But following the logical flow of the
program, that really shouldn't matter should it?

Any thoughts on what might be going on?

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 21st Mar 2009 13:43
Quote: "One thought that I had was I'm using the same packets for both instances on the game server. But following the logical flow of the
program, that really shouldn't matter should it?"

Correct, that doesn't matter. When receiving packets the destination packet's data is overwritten and it is resized accordingly. When sending packets the contents of the packet is not changed.

Quote: "Any thoughts on what might be going on?"

A common mistake is doing the following when receiving TCP packets:


it should be "if result > 0" because mnRecvTCP returns the number of packets in waiting, which can be more than 1.

Make sure that you are regularly checking that mnConnect instances are connected by using mnClientConnected; perhaps the instance is getting disconnected.

Make sure that TCP is being used to send/receive the data because while using UDP packets are often dropped.

Make sure that the application is always running properly i.e. make sure that the loop does not pause at a certain point.

You could also check that all of the instance parameters are correct, you could be doing something like using mnConnect and mnStartServer on the same instance.

If none of that advice was helpful you can post or email me some code and I can debug it for you.
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 21st Mar 2009 18:31 Edited at: 21st Mar 2009 18:48
The packets I'm working with are TCP, I haven't had a problem with UDP since those are sent, and resent, and resent..

I double checked the instance variables. They're all globals, and are all defined properly.

Quote: "Make sure that you are regularly checking that mnConnect instances are connected"

The one acting as client always checks itself, and drops back to a reconnect attempt. Plus, I can send a request from the client, and
watch the screens of the server and one time it wont go through, and the next time it will.

Quote: "Make sure that the application is always running properly i.e. make sure that the loop does not pause at a certain point."

The data server has a lot going on, but it's not using VSYNC and sync rate is 0, so it's running through the main loop as fast as it
can. FPS stays around 100-200. The game server runs 400-500 FPS.

Here's one of the offending peices of code from the data server. It's receiving a Contract Take request sent from the game server,
updating the Contract and Player records, and sending both those records back.


Here's the code from the game server that sent the above request.


This is where I suspect the issue is. Not necessarily with the way
I'm doing it, but receiving a packet, then turning around and sending it back out another instance. (just a thought..)

There are other times when things get out of sync, and the game server crashes with an error when it's starting up and downloading
all the startup data, but if I close it and rerun it, it works fine. So it's definitely some kind of intermittent issue.

Thanks.

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 23rd Mar 2009 01:08
I can't see anything wrong with the code you posted, although I could have missed something.

I wrote some test code that tests your scenario and had no problems. It would be good if you could replicate your problem using the below test code or an adjusted version because then we are better able to determine the cause in this simple version. If you are unable to replicate the problem then it is likely to be a problem with your code rather than MikeNet.

The client connects to the game server which is connected to the data server. The client can send requests to open or close a contract which it sends to the game server. The game server forwards these requests to the data server. The data server takes action and sends a confirmation back to the game server which is then forwarded to the client. This is used to determine whether the requested action was successful. Let me know if this is majorly different to the way in which your system operates.

I hope you manage to fix the problem, good luck

Data Server


Game Server


Client
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 24th Mar 2009 18:21 Edited at: 24th Mar 2009 18:41
Thanks. That's basically the way I've got it set up.

I'll check this out and let you know.

[edit]
I made one small change to the game server. I set it's IP in mn Set Local to "". Then put the Data and Game servers on the same machine
I'm using for my stuff. Ran the client from my machine, and it worked just fine. So there must just be something out of sync in
my code somewhere. With over 15,000 lines between the 3 apps so far, I guess that's not surprising..

Thanks for that. I'll let you know what it was when I find it.

KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 24th Mar 2009 21:11 Edited at: 24th Mar 2009 21:14
I have to admit, I feel pretty silly on this one, but it was a difficult little bugger to track down.

I have a variable for the player records Players(r).active. I set it to 0 when the player connects so the client can download the
necessary level data without being bombarded by the ongoing data flow of player and NPC updates. Once they're ready to begin, the
client sends the ready packet and I switch active to 1. Well, I was doing that on the game server, but not on the data server. So when
their record was updated on the data server for a contract, active got reset to 0 and they were skipped by the sending routine.

I added the active flag update to the data server and it all worked like a charm. Wish I'd spotted that a week ago..

Thanks again.

AlexI
19
Years of Service
User Offline
Joined: 31st Dec 2004
Location: UK
Posted: 26th Mar 2009 17:37
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 26th Mar 2009 17:47
What can I say, I'm a fan of the plug-in. Not to mention there isn't 5 minutes that goes by in a work day where I don't touch one of the commands from it.

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 31st Mar 2009 01:27 Edited at: 31st Mar 2009 01:37
Version 1.1.2
Finally, v1.1.2 of MikeNet is available and can be purchased from TGC here:
http://darkbasicpro.thegamecreators.com/?f=darknet

The name has changed to DarkNet but I don't mind what you call it

There is also a DBP thread about DarkNet which can be found here:
http://forum.thegamecreators.com/?m=forum_view&t=147976&b=1

DBP users: If you have previous version of MikeNet installed and want to use v1.1.2 (DarkNet) then you may need to manually delete the old version. This is because MikeNet was previously installed in the plugins-users folder but is now installed in the plugins-licensed folder, so you could potentially have two versions of MikeNet installed at the same time which may cause conflict. For me the old version of MikeNet is located at: "C:/Program Files/Dark Basic Software/Dark Basic Professional/Compiler/plugins-user".

In this version are the following changes (quoted from change log):
-Added UPnP commands which adds support for programmatic port map configuration. E.g. you can now setup port forwarding programmatically.

-Improved performance of mnSend commands.

-Error message boxes have been changed slightly and mnGetErrorFile has been added due to MikeNet being split up into multiple files.

-Added mnGetVersion which returns version information of MikeNet.

-New error messages have been added, some of which can be disabled using mnDisableDebug which disables errors that can be caused by rogue clients.

-Demo code has been updated to improve readability.

-The following bugs have been fixed:
1. Connection packets from the client can no longer be received in UDP mode catch all. Previously packets with a prefix of 0 (integer) could be received by the server shortly after a client connected in UDP mode catch all.

2. In C++ deallocating a string with delete[] will not cause a crash when the return value of mnGetStringC is an empty string due to an error occurring.

3. Fixed rare occurrence of heap corruption during mnFinish due to freeing of resources before closesocket operation completed.

4. Fixed memory leak occurring where mnFinish did not deallocate packet stores (e.g. TCP received packets that had not yet been received via mnRecvTCP).

5. Changed mnGetPhysicalCPU and mnGetLogicalCPU so that if no CPU cores are detected a value of 1 is returned. This fixes a rare case where mnStart creates no threads when number of threads is set to 0.

6. Fixed the return value of several commands that were returning wrong values. This bug was normally only apparent in the event of an error.
dale2507
16
Years of Service
User Offline
Joined: 1st Apr 2008
Location: My own little world...
Posted: 1st Apr 2009 01:13
hey just reporting what i believe to be a few bugs but it could just be me. In the dbpro upnp demo theres a function DoUpdate with the following line:

This returns an error but if i comment out the error checking it works fine. the error is a "converting from BSTR to CSTR" which i gather is some string conversion.

Secondly i've been having a play just to get my head around it and i have the following code:

This also returns the same error message.

Besides this great work on the upnp and the plugin once again. hope u make a fair bit from it cos it deserves it.

Any help much appreciated.

Dale2507
Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 1st Apr 2009 17:35
You are correct, the problem occurs when DarkNet tries to convert between the string type used by COM (BSTR) and normal strings (CSTR).

This could be a bug but to determine the cause of the problem I need to know the error codes of the errors. If possible, could you post a screenshot of the error output?

Thanks for reporting this

dale2507
16
Years of Service
User Offline
Joined: 1st Apr 2008
Location: My own little world...
Posted: 1st Apr 2009 20:30
Ok the first error has now decided to fix itself and the second is:

Command: mnAddPortMap
Code: 87
Line: 17
File: .\UPnPHelperFunctions.cpp
Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 1st Apr 2009 20:50 Edited at: 1st Apr 2009 22:28
Thanks

Quote: "first error has now decided to fix itself"


This is probably due to a change in the port mappings of your router. I believe the error is caused by DarkNet struggling to deal with a port map where one of the string settings is blank, I will release an update soon that fixes this issue.

I get an error when I pass a blank string to mnAddPortMap; are you doing this?

[edit]
I have resolved this with dale2507 over MSN and will release a fix within the next few days. The bug means that errors can occur when using UPnP commands on certain systems/routers.

Tv Xxx
16
Years of Service
User Offline
Joined: 23rd Sep 2007
Location: Behind You!
Posted: 2nd Apr 2009 00:52
hi mike,

loving darknet tho lbh its mikenet really

but i've noticed a problem with Upnp, if its not on the exceptions on windows xp firewall, it doesnt work, and by default its disabled, so i dunno if you can add something that allows it through? just an idea?

yours

Tv


Click my signature for free webhosting!
Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 3rd Apr 2009 01:34
It is possible to provide functions that can control windows firewall and I may add this functionality in the future.

It is not possible to enable UPnP programatically, so you may have to tell your users to do this manually.

I could be wrong but I think in Vista UPnP is default enabled, which suggests that future windows operating systems will also have UPnP default enabled.

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 3rd Apr 2009 15:46
v1.1.3
I have sent v1.1.3 to TGC so it should be available soon

Changes:
1. There are some new DarkNet errors which help to prevent basic coding mistakes. e.g. using mnStart multiple times in a row; using certain commands on an instance that is not active i.e. mnStartServer, mnConnect or mnStartBroadcast have not been used; starting an instance twice in a row. If these new error messages cause problems for you please post a code snippet and I will debug it for you.

2. Performance has increased slightly. mnSend commands are more efficient and TCP multithreaded receiving performance has improved.

3. A couple of bugs have been fixed:
-Fixed a rare issue where using mnFinish could cause the application to freeze indefinitely.
-Fixed a UPnP issue where DarkNet had trouble dealing with blank port map settings e.g. a port map's description could be blank.

AlexI
19
Years of Service
User Offline
Joined: 31st Dec 2004
Location: UK
Posted: 4th Apr 2009 19:28 Edited at: 4th Apr 2009 19:41
Hi,
Can you add a command which downloads a file off an http server and returns it contents as a string.

Something like:

char* contents = mnDownloadHTTPFile(char* url)

It must NOT cache file. At the moment I am using the URLmon library but it's quite slow and also cache's the file so you have to add a timer string on the end of the URL to prevent this. I am already using mike net in my project but the free version. So if you add this function I will buy it

I know I could also write the command myself sending the headers to the server and getting the page, but i don't have time to do this.

Tell me if you add this,
Thanks,
Alex

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 4th Apr 2009 21:22
I'll add it to my to do list I will let you know if/when it is added. I'm not sure how long it will take me, this depends on the time I have and how easy it is to implement.

KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 4th Apr 2009 22:38
That would be usefull. What I've done for WAO was write a file download server application, then in the client it talks directly with that and downloads the files. It's slower than FTP or HTTP download, but it seems to work ok.

AlexI
19
Years of Service
User Offline
Joined: 31st Dec 2004
Location: UK
Posted: 4th Apr 2009 23:48
Quote: "I'll add it to my to do list "


What else is on it ?

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 5th Apr 2009 11:32
Here are some ideas I have for DarkNet, what I actually do will depend on the amount of time I have:
-Sound commands so that data can be gained from the microphone and played. This would allow applications to be created where players can talk with each other.
-Packet compression.
-Optional exception based error system for C++ and .NET users.
-Windows firewall commands.
-Greater support for UPnP to allow applications to register themselves as UPnP devices and control other UPnP devices. Currently only port map manipulation is supported.

Tv Xxx
16
Years of Service
User Offline
Joined: 23rd Sep 2007
Location: Behind You!
Posted: 5th Apr 2009 12:32
wooo Wondows firewall commands

then i dont have to run multisync along side mikenet

Yours
Tv.


Click my signature for free webhosting!
GIDustin
15
Years of Service
User Offline
Joined: 30th May 2008
Location:
Posted: 5th Apr 2009 23:03
Quote: "Sound commands so that data can be gained from the microphone and played. This would allow applications to be created where players can talk with each other."


This would pretty much make my game complete. As soon as you complete this, I intend to buy your plugin.

The UPnP thing sounds awesome as well. A lack of a way of getting past routers is what made my incorporate a central match-making server for my game, but with UPnP it appears I can forego that as well.

/excited
KISTech
16
Years of Service
User Offline
Joined: 8th Feb 2008
Location: Aloha, Oregon
Posted: 6th Apr 2009 19:14
Just have to keep in mind not all routers out there support UPnP, and not all of the ones that do are going to have it enabled.

That's why sites like http://www.portforward.com still exist.

It's an imperfect world, but somehow we still manage to muddle through.

AlexI
19
Years of Service
User Offline
Joined: 31st Dec 2004
Location: UK
Posted: 7th Apr 2009 20:06 Edited at: 7th Apr 2009 20:07
Quote: "-Sound commands so that data can be gained from the microphone and played. This would allow applications to be created where players can talk with each other."


wow, that makes mike net so powerful and saves me even more time. I will definatley buy it, if you add this.

I was looking at writing the sound stuff myself by using db record sound and the sending the data as memblock's but I haven't tried it yet. But it sounds like you might be able to make a better way and stream it properly

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 10th Apr 2009 18:59 Edited at: 10th Apr 2009 19:01
v1.1.4
I have sent v1.1.4 to TGC so it should be available soon.

In this version are the following bug fixes:

1. Late connection packets
Fixed bug where UDP modes: 'per client' and 'per client, per operation' could wrongly disconnect clients and generate debug error messages and UDP mode 'catch all' could wrongly receive connection packets in server state. This occurs on rare occasions when connection UDP packets arrive late (after the connection process has been completed). This is more likely to happen when the client/server connection quality is poor.

The issue with UDP mode 'per client' and 'per client, per operation' has been fixed. With UDP mode 'catch all', you must ensure that your code deals with this rare occurrence. The connection packets always have a prefix of an unsigned integer of 0 and should be ignored. The documentation has been updated with this information.

2. Rare 'no prefix' problem
On packets where there is no UDP (clock value) or TCP (packet size) prefix, on rare occurrences an undefined prefix could be added which causes problems when in UDP mode 'catch all' and when connecting to a server. This has been fixed.

3. mnGetLogicalCPU and mnGetPhysicalCPU
These commands were returning wrong values. This has been fixed.

mnGetLogicalCPU will now only return a correct value on Windows Vista, Windows XP Professional x64 Edition, Windows XP with SP3 or later.

In the event of an error when using either of these commands a value of 1 will be returned.

AlexI
19
Years of Service
User Offline
Joined: 31st Dec 2004
Location: UK
Posted: 13th Apr 2009 22:42 Edited at: 13th Apr 2009 22:49
Well I have got the heap corruption error from the free version now So I have bought DarkNet (Please approve order so I can work on game ) , but please still keep working on the voice commands and don't worry about the HTTP commands, i found a better way of doing that

Michael P
18
Years of Service
User Offline
Joined: 6th Mar 2006
Location: London (UK)
Posted: 13th Apr 2009 23:02
Quote: "Please approve order so I can work on game"

I don't do this myself, TGC do it I imagine they are busy enjoying their easter

Quote: "but please still keep working on the voice commands"

I am currently working on it

GIDustin
15
Years of Service
User Offline
Joined: 30th May 2008
Location:
Posted: 13th Apr 2009 23:10
Quote: "don't worry about the HTTP commands, i found a better way of doing that"


How? I am currently looking for a non-blocking way to do this. Perhaps you could post your code in the code snippets to aviod thread-jacking.
AlexI
19
Years of Service
User Offline
Joined: 31st Dec 2004
Location: UK
Posted: 14th Apr 2009 04:09 Edited at: 14th Apr 2009 04:11
Quote: "How? I am currently looking for a non-blocking way to do this. "


Are you using C++?

Quote: "I am currently working on it "


Looking forward to it

GIDustin
15
Years of Service
User Offline
Joined: 30th May 2008
Location:
Posted: 14th Apr 2009 21:29
Quote: "Are you using C++?"


No, just DBPro
AlexI
19
Years of Service
User Offline
Joined: 31st Dec 2004
Location: UK
Posted: 15th Apr 2009 02:41

Login to post a reply

Server time is: 2024-04-19 08:44:46
Your offset time is: 2024-04-19 08:44:46