Ejemplo n.º 1
0
        private static void SendAllKnownAddresses(Client client)
        {
            string addressesSql = "SELECT * from KnownAddresses WHERE NodeID = @nodeid;";

            try
            {
                SQLiteCommand command = new SQLiteCommand(addressesSql, Database.Connection);
                command.Parameters.AddWithValue("@nodeid", client.Node.ID);

                // TODO: This really should send a single message which contains all the addresses.
                SQLiteDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    string          address  = reader.GetString(reader.GetOrdinal("Address"));
                    string          hostname = reader.GetString(reader.GetOrdinal("Hostname"));
                    Common.NodeType type     = (Common.NodeType)reader.GetInt32(reader.GetOrdinal("Type"));

                    AsyncSocketListener.Send(client.GetSocket(), Messages.UpdateKnownAddressMessage(address, hostname, type));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Ejemplo n.º 2
0
 private Node(UInt64 id, Address address, Common.NodeType nodeType, bool terminated)
 {
     m_ID         = id;
     m_Address    = address;
     m_NodeType   = nodeType;
     m_Terminated = terminated;
 }
Ejemplo n.º 3
0
        public static Messages.NodeConnectResult NodeConnect(List <string> route, out int nodeErrorIndex)
        {
            string nodeSql = "SELECT * from Nodes WHERE Address = @address";

            for (int i = 0; i < route.Count; ++i)
            {
                bool          isBounce = (i != route.Count - 1);
                string        address  = route[i];
                SQLiteCommand command  = new SQLiteCommand(nodeSql, Database.Connection);
                command.Parameters.AddWithValue("@address", address);

                SQLiteDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    // The black market always rejects bounces, as the players can never see its logs.
                    Common.NodeType type = (Common.NodeType)reader.GetInt32(reader.GetOrdinal("Type"));
                    if (type == Common.NodeType.Blackmarket && isBounce)
                    {
                        nodeErrorIndex = i;
                        return(Messages.NodeConnectResult.ConnectionRejected);
                    }

                    // TODO: Create log entry
                }
                else
                {
                    nodeErrorIndex = i;
                    return(Messages.NodeConnectResult.Timeout);
                }
            }

            nodeErrorIndex = -1;
            return(Messages.NodeConnectResult.Success);
        }
Ejemplo n.º 4
0
        static public Node Create(Common.NodeType nodeType)
        {
            if (m_NodesTableMutex == null)
            {
                m_NodesTableMutex = new Mutex();
            }

            m_NodesTableMutex.WaitOne();
            Address address = CreateAddress();

            string nodeSql = "INSERT INTO Nodes(Address, Type, Terminated) VALUES(@address, @type, @terminated)";

            try
            {
                SQLiteCommand command = new SQLiteCommand(nodeSql, Server.Database.Connection);
                command.Parameters.AddWithValue("@address", address.Value);
                command.Parameters.AddWithValue("@type", (int)nodeType);
                command.Parameters.AddWithValue("@terminated", 0);
                command.ExecuteNonQuery();
            }
            catch (Exception)
            {
                throw;
            }

            // Retrieve the automatically generated ID from the database for this new entry
            UInt64 id       = 0;
            string nodesSql = "SELECT * from Nodes WHERE Address = @address;";

            try
            {
                SQLiteCommand command = new SQLiteCommand(nodesSql, Server.Database.Connection);
                command.Parameters.AddWithValue("@address", address.Value);

                SQLiteDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    id = (UInt64)reader.GetInt64(reader.GetOrdinal("ID"));
                }
            }
            catch (Exception)
            {
                throw;
            }

            m_NodesTableMutex.ReleaseMutex();

            return(new Node(id, CreateAddress(), nodeType, false));
        }
Ejemplo n.º 5
0
        public static byte[] UpdateKnownAddressMessage(string address, string hostname, Common.NodeType nodeType)
        {
            FlatBufferBuilder bb = new FlatBufferBuilder(2);

            var messageOffset = MessagesInternal.UpdateKnownAddressMessage.CreateUpdateKnownAddressMessage(bb,
                                                                                                           bb.CreateString(address),
                                                                                                           hostname.Length == 0 ? default(StringOffset) : bb.CreateString(hostname),
                                                                                                           (MessagesInternal.TypeNode)nodeType);

            var baseOffset = MessagesInternal.MessageBase.CreateMessageBase(bb, MessagesInternal.MessageContainer.UpdateKnownAddressMessage, messageOffset.Value);

            bb.Finish(baseOffset.Value);

            return(PrefixMessageLength(bb));
        }