コード例 #1
0
        private static byte[] fill_message(message_types message_id, object entity, byte[] message, int length)
        {
            if (length > MAX_MESSAGE_LENGTH)
            {
                return(null);
            }
            if (length < 0)
            {
                length = 0;
            }
            if (!_out_buffers.ContainsKey(length))
            {
                _out_buffers.Add(length, new byte[SIGNATURE_LENGTH + 1 + 8 + length]);
                for (uint index = 0; index < SIGNATURE_LENGTH; ++index)
                {
                    _out_buffers[length][index] = _signature[index];
                }
                //log_sync_action("fill_message", string.Format("allocated buffer of length {0} ({1} length {2})", SIGNATURE_LENGTH + 1 + 8 + length, message_id, length));
            }
            byte[] message_buffer = _out_buffers[length];
            message_buffer[SIGNATURE_LENGTH] = (byte)message_id;
            if (!encode_entity_id(message_id, entity, message_buffer))
            {
                return(null);
            }
            //log_sync_action("fill_message", string.Format("entity valid ({0})", message_id));
            int buffer_index = SIGNATURE_LENGTH + 1 + 8;

            for (int index = 0; index < length; ++index)
            {
                message_buffer[buffer_index++] = message[index];
            }
            return(message_buffer);
        }
コード例 #2
0
 public static void deregister_entity(message_types message_type, long entity_id)
 {
     if (_entities[(int)message_type] != null && _entities[(int)message_type].ContainsKey(entity_id))
     {
         _entity_ids[(int)message_type].Remove(_entities[(int)message_type][entity_id]);
         _entities  [(int)message_type].Remove(entity_id);
     }
 }
コード例 #3
0
 public static void register_entity(message_types message_type, object entity, long entity_id)
 {
     if (_entities[(int)message_type] == null)
     {
         _entities  [(int)message_type] = new Dictionary <long, object>();
         _entity_ids[(int)message_type] = new Dictionary <object, long>();
     }
     _entities  [(int)message_type].Add(entity_id, entity);
     _entity_ids[(int)message_type].Add(entity, entity_id);
 }
コード例 #4
0
 public static void send_message_to_server(message_types message_id, object entity, byte[] message, int length)
 {
     if (!network_handlers_registered || running_on_server)
     {
         return;
     }
     byte[] message_buffer = fill_message(message_id, entity, message, length);
     if (message_buffer != null)
     {
         MyAPIGateway.Multiplayer.SendMessageToServer(SYNC_MESSAGE_ID, message_buffer);
     }
 }
コード例 #5
0
 public static void send_message_to(ulong recipient, message_types message_id, object entity, byte[] message, int length, bool reliable = true)
 {
     if (!network_handlers_registered || !running_on_server)
     {
         return;
     }
     byte[] message_buffer = fill_message(message_id, entity, message, length);
     if (message_buffer != null)
     {
         MyAPIGateway.Multiplayer.SendMessageTo(SYNC_MESSAGE_ID, message_buffer, recipient, reliable);
     }
 }
コード例 #6
0
        private static bool encode_entity_id(message_types message_type, object entity, byte[] message)
        {
            long entity_id;

            if (entity == null)
            {
                entity_id = 0;
            }
            else
            {
                if (!_entity_ids[(int)message_type].ContainsKey(entity))
                {
                    return(false);
                }
                entity_id = _entity_ids[(int)message_type][entity];
            }
            encode_signed(entity_id, 8, message, SIGNATURE_LENGTH + 1);
            return(true);
        }
コード例 #7
0
        private static object decode_entity_id(message_types message_type, byte[] message)
        {
            long entity_id = decode_signed(8, message, SIGNATURE_LENGTH + 1);

            return((entity_id != 0 && _entities[(int)message_type] != null && _entities[(int)message_type].ContainsKey(entity_id)) ? _entities[(int)message_type][entity_id] : null);
        }