aboutsummaryrefslogtreecommitdiff
path: root/advtrains
Commit message (Collapse)AuthorAge
* Do not clear tarvelocity when setting new, potential no-op commandorwell962019-01-15
|
* Add "routingcode" propertyorwell962019-01-09
| | | | Used for ARS and stop points
* Make track protection radius configurableorwell962018-12-18
|
* Fix player_to_train_mapping (H#74)orwell962018-12-16
| | | | Entries were not inserted, thus neither damage protection nor teleport-to-train did work
* Fix 144e1fc4e01741f8cdd5a579ae84cde85c420d78 (there's no self in one of the ↵orwell962018-12-10
| | | | instructions)
* Fix crashes:orwell962018-12-10
| | | | | 1. when train hit a route, nil access to already cancelled route caused crash 2. fix crash when trying to ensure_init a train that doesn't exist
* Change get_inventory_formspec API - add invname parameterorwell962018-12-10
|
* Shunt signals (not exactly Ks), along with fixes in other components that ↵orwell962018-12-08
| | | | those rely on
* Apply speed restriction 0.5 indexes later, do not cap tarvelocity by ↵orwell962018-12-04
| | | | speed_restriction
* Added on_train_approach callback, non-permanent external LZB brakepoints and ↵orwell962018-11-29
| | | | | | basis for "stop rails" Stop rails ATM use the aforementioned things to add a pointwise "2" speed restriction. Seems to work.
* Implement new position encoding function and benchmark itorwell962018-11-29
| | | | | This shall replace all "pos_to_string" hashes in the long term. Performs a bit better than pos_to_string (but still worse than the "nested tables" layout the nodedb uses (an unmatched open parenthesis leaves a tension that will stay all day... 2 do even more
* Fix discouple positioning when wagon was just loadedorwell962018-11-20
|
* Remove superfluous "tarvelocity" assignmentsorwell962018-11-20
|
* Make "Line" property accessible from OBC and gettable via LATC, change ↵orwell962018-11-20
| | | | subway wagon texture handling
* Remove debug printorwell962018-11-20
|
* Fix protection regarding tracks (track_builder and railway_operator) and ↵orwell962018-11-12
| | | | documentation on privileges
* Increase savefile version to 2orwell962018-11-10
| | | | (Master downgrade protection)
* Remove "couple locks" and apply protection to the actual coupling process, ↵orwell962018-11-10
| | | | and fix permissions on that
* No static_save for discouple entitiesorwell962018-10-30
|
* Document fix 0a982b6356b2f4b6a28e74f9f90c4f584169a96dorwell962018-10-29
| | | | Add comment that explains why fix was necessary
* Actually set last_connid to 1, to prevent warningorwell962018-10-29
|
* Handle the case that a train is not initialized (train_ensure_init returns ↵orwell962018-10-29
| | | | | | nil/false) Fixes H#72
* atdump() to treat certain values specialorwell962018-10-29
|
* Small fixes which do not have any effectorwell962018-10-29
|
* Complete Ks Main signalsorwell962018-10-26
|
* Fix node database ATC rail bugorwell962018-10-17
| | | | | | | After successfully registering newly-placed ATC rails in the nodedb, the rail's after_place_node() callback (local apn_func()) immediately cleared it again by passing a "node" object that was actually a player object and thus had no "name" or "param2" to ndb.update(), which it handled how it should not in this situation. Since those ndb.update calls were unnecessary anyways, I removed them completely.
* Prevent any user control except "Brake" when an ATC override is presentorwell962018-10-17
| | | | Solves the problem of accidentally breaking atc-driven trains
* Improve ATC-LZB-User control interaction, smoothen LZB control operationsorwell962018-10-17
| | | | (prevent flickering view when atc battles against lzb)
* Address H#60, H#17, M#18 and M#7orwell962018-10-17
| | | | | | | duplicate "message" to "msg" make operation panel "cracky" remove inexistent dtime_s parameter add bones:bones to the list of not_blocking_trains nodes
* Fix H#69orwell962018-10-17
| | | | Cause was a cascaded crash, original cause was something different
* Fix H#66 (Hemiptera 66) crash on missing double_conn matchorwell962018-10-17
|
* Actually allow what manual promises (setting IP on non-assigned signals)orwell962018-10-17
|
* Properly handle speed restrictionsorwell962018-10-10
|
* Remote Routesetting from Onboard Computerorwell962018-10-10
| | | | + Fix lzb oncoming item deletion/speed restriction
* Properly implement invalidate_all_paths, recheck lzb on aspect changeorwell962018-10-10
|
* Add signal safety control override, restructure control systemorwell962018-10-10
|
* Make signal influence point (~halt point) specifiableorwell962018-10-09
| | | | Also extend signal api necessarily
* Improve route programming:orwell962018-10-07
| | | | | | | - Formspec for TCBs instead of unhandy chatcommands - Ability to advance route over the next secction without punching end - Better visualization - Ability to route into dead-end sections
* Add interlocking guide/manual, silence debug outputsorwell962018-09-14
|
* Move passive API to the advtrains coreorwell962018-08-16
| | | | to remove dependency of interlocking on luaautomation
* Fix various bugs found while testingorwell962018-08-13
|
* Teleport player to their train every 2 seconds instead of just on_joinplayerorwell962018-08-12
| | | | Solves problem of wagon being unloaded while player sitting inside it because of network lag
* Fix some incompatibility crash for old worldsorwell962018-08-12
|
* onboard computer fixh-v-smacker2018-08-12
|
* Remove redundant digtron.lua fileGabriel Pérez-Cerezo2018-08-12
|
* Make digtron able to build tracks.Gabriel Pérez-Cerezo2018-08-12
|
* Fix ATC rail reversingorwell962018-08-12
|
* Signal aspect handling, make default signals compatible, fix signal diggingorwell962018-08-12
|
* Add routesetting callbacks.orwell962018-08-12
| | | | Now, only the signal aspect setting is still missing
* Implement routesettingorwell962018-07-21
| | | | Missing things: signal aspect updating, waiting routes handling, management /info tool
ef='#n865'>865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090
/*
Minetest
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#ifndef CONNECTION_HEADER
#define CONNECTION_HEADER

#include "irrlichttypes_bloated.h"
#include "socket.h"
#include "exceptions.h"
#include "constants.h"
#include "util/pointer.h"
#include "util/container.h"
#include "util/thread.h"
#include "util/numeric.h"
#include <iostream>
#include <fstream>
#include <list>
#include <map>

namespace con
{

/*
	Exceptions
*/
class NotFoundException : public BaseException
{
public:
	NotFoundException(const char *s):
		BaseException(s)
	{}
};

class PeerNotFoundException : public BaseException
{
public:
	PeerNotFoundException(const char *s):
		BaseException(s)
	{}
};

class ConnectionException : public BaseException
{
public:
	ConnectionException(const char *s):
		BaseException(s)
	{}
};

class ConnectionBindFailed : public BaseException
{
public:
	ConnectionBindFailed(const char *s):
		BaseException(s)
	{}
};

class InvalidIncomingDataException : public BaseException
{
public:
	InvalidIncomingDataException(const char *s):
		BaseException(s)
	{}
};

class InvalidOutgoingDataException : public BaseException
{
public:
	InvalidOutgoingDataException(const char *s):
		BaseException(s)
	{}
};

class NoIncomingDataException : public BaseException
{
public:
	NoIncomingDataException(const char *s):
		BaseException(s)
	{}
};

class ProcessedSilentlyException : public BaseException
{
public:
	ProcessedSilentlyException(const char *s):
		BaseException(s)
	{}
};

class ProcessedQueued : public BaseException
{
public:
	ProcessedQueued(const char *s):
		BaseException(s)
	{}
};

class IncomingDataCorruption : public BaseException
{
public:
	IncomingDataCorruption(const char *s):
		BaseException(s)
	{}
};

typedef enum MTProtocols {
	MTP_PRIMARY,
	MTP_UDP,
	MTP_MINETEST_RELIABLE_UDP
} MTProtocols;

#define SEQNUM_MAX 65535
inline bool seqnum_higher(u16 totest, u16 base)
{
	if (totest > base)
	{
		if((totest - base) > (SEQNUM_MAX/2))
			return false;
		else
			return true;
	}
	else
	{
		if((base - totest) > (SEQNUM_MAX/2))
			return true;
		else
			return false;
	}
}

inline bool seqnum_in_window(u16 seqnum, u16 next,u16 window_size)
{
	u16 window_start = next;
	u16 window_end   = ( next + window_size ) % (SEQNUM_MAX+1);

	if (window_start < window_end)
	{
		return ((seqnum >= window_start) && (seqnum < window_end));
	}
	else
	{
		return ((seqnum < window_end) || (seqnum >= window_start));
	}
}

struct BufferedPacket
{
	BufferedPacket(u8 *a_data, u32 a_size):
		data(a_data, a_size), time(0.0), totaltime(0.0), absolute_send_time(-1),
		resend_count(0)
	{}
	BufferedPacket(u32 a_size):