Пример #1
0
    def delete_regions(self, client, params = None):
        """Either renders the template to confirm deleting a region, or handle the deletion process ifself

        :param Client client: The requesting client
        :param dict params: Optional; contains the form parameters
        :return: dict - Status and Html-layout data response
        """
        if params == None:
            dialog = render_to_string("opensim/delete_region_confirmation.html")
            defer.returnValue({'data':{'dom':{'dialog':dialog}}})
        else:
            deleted_offline = []
            deleted_online = []
            for region_uuid in params:
                region = Regions().get_region(region_uuid)
                queued = Maps.render_cell(region['Location'].split(',')[0],region['Location'].split(',')[1])
                result = yield HWIOS.pb_server.radmin_proxy(region['service_uuid'],'admin_delete_region',{'region_id':region_uuid})
                if 'error' in result and result['error'] == 'SIM_OFFLINE':
                    deleted_offline.append(result['error'])
                elif 'success' in result:
                    deleted_online.append(result['success'])            
            client_response, tpl_params = self._get_regions(client)
            client_response.update({
                'status':{
                    'code':'DELETE_OK',
                    'i18n':_('Deleted: %(online)s online and %(offline)s offline region(s) ') % {'online':len(deleted_online),'offline':len(deleted_offline)},
                    'type': HWIOS.ws_realm._t['notify-info']
                },
            })
            notify_others(client, client_response,'/opensim/regions/modified/', '^/opensim/regions/$', tpl_params)
            publish_activity(client.profile, _('Region deleted'),'/opensim/regions/',[0,0,4,0,0])
            defer.returnValue(client_response)
Пример #2
0
    def handle_settings(self, client, params = None):
        """Either renders the template to change opensim's settings, or handle the update settings process itself

        :param Client client: The requesting client
        :param dict params: Optional; contains the form parameters
        :return: dict - Status and Html-layout data response
        """   
        if params == None:
            response = {'status':{}}
            simulator_form = SimulatorSettingsForm(initial={'master_ini': open("./services/web_ui/dav_store/config/grid_master.ini","r").read()})       
            main = render_to_string("opensim/read_settings.html", {'simulator_form':simulator_form,'map_form':self._get_map_form()})
            return {'data':{'dom':{'main':main}}}
        else:
            if 'master_ini' in params:
                simulator_form = SimulatorSettingsForm(params)
                if simulator_form.is_valid():
                    infile = open("./services/web_ui/dav_store/config/grid_master.ini","w")
                    infile.write(simulator_form.cleaned_data['master_ini'])
                    response = {'status':{
                        'code':'SETTINGS_UPDATE_OK',
                        'i18n':_('Simulator settings succesfully updated'),
                        'type': HWIOS.ws_realm._t['notify-info']
                        }
                    }
                else: 
                    response = {'status':{
                        'code':'INVALID_FORM',
                        'i18n':_('Invalid form'),
                        'type': HWIOS.ws_realm._t['notify-info']
                        }
                    }
            elif 'center_z' in params:
                simulator_form = SimulatorSettingsForm(initial={'master_ini': open("./services/web_ui/dav_store/config/grid_master.ini","r").read()})     
                if 'osm' not in params:
                    params['osm'] = False
                response = {'status':{}}
                map_form = MapSettingsForm(params)
                if map_form.is_valid():
                    service_config = HWIOS.services['tms'].config
                    for section in service_config.sections():
                        for key,value in service_config.items(section):
                            if key in params:
                                service_config.set(section,key,params[key])
                    service_config.write(open(os.path.join(service_config.location,'service.ini'),'wb'))
                    service_config.read(os.path.join(service_config.location,'service.ini'))
                    response['status'] = {
                        'code':'CONFIG_UPDATE_OK',
                        'i18n':_('Configuration updated...'),
                        'type': HWIOS.ws_realm._t['notify-info']
                    }
                else:
                    response['status'] = {
                        'code':'FORM_INVALID',
                        'i18n':_('Invalid form!'),
                        'type': HWIOS.ws_realm._t['notify-warning']
                    }
                Maps.update_client_settings()
            client_response, tpl_params = self._get_settings(client)
            client_response.update(response)
            _target_state = '/opensim/settings/'
            notify_others(client, client_response,'/opensim/settings/modified/', '^/opensim/settings/$', tpl_params, _target_state)
            publish_activity(client.profile, _('OpenSim Settings updated'),'/opensim/settings/',[0,0,4,0,0])
            return client_response    
Пример #3
0
    def edit_region(self, client, region_uuid, params = None):
        """Either renders the template to edit an existing region, or handle the update process

        :param Client client: The requesting client
        :param str region_uuid: The region uuid reference to select the appropriate region for updating
        :param dict params: Optional; contains the form parameters
        :return: dict - Status and Html-layout data response
        """
        if params == None:
            region = Regions().get_region(region_uuid)
            data = {'sim_uuid': region['RegionUUID'], 
                    'internal_ip_address':region['InternalAddress'],
                    'internal_ip_port':region['InternalPort'],
                    'external_host_name':region['ExternalHostName'],
                    'object_capacity':15000,
                    'sim_location_x':region['Location'].split(',')[0],
                    'sim_location_y':region['Location'].split(',')[1],
                    'name':region['name'],
                    'owner':None,
                    'service':region['service_uuid']}
            form = RegionForm(initial=data)
            main = render_to_string("opensim/edit_region.html", {'form':form,'region_uuid':region_uuid})
            defer.returnValue({'data':{'dom':{'main':main}}})
        else:        
            response = {'status':{}}
            profile = Profile.objects.get(pk = params['owner'])
            radmin_params = {
            'region_name':params['name'],
            'region_id':region_uuid,
            'region_x':params['sim_location_x'],
            'region_y':params['sim_location_y'],
            'region_master_uuid':profile.uuid,
            'region_master_first':profile.first_name,
            'region_master_last':profile.last_name,
            'region_master_password':'******',
            'public':'true',
            'enable_voice':'true'
            }
            #clean old map-location with an opaque tile
            region_old = Regions().get_region(region_uuid)
            old_xy = [region_old['Location'].split(',')[0],region_old['Location'].split(',')[1]]
            queued = Maps.render_cell(old_xy[0],old_xy[1])
            service_client = yield HWIOS.pb_server.search_service(params['service'])
            #if the service is not online, take the existing image
            tms_config = HWIOS.services['tms'].config
            if tms_config.getboolean('map','osm'): ztop = tms_config.get('map','osm_ztop')
            else: ztop = tms_config.get('map','raw_ztop')
            
            if service_client['service']['status'] == 'OFF':
                if tms_config.getboolean('service','ssl'):
                    image_loc = 'https://%s:%s/tiles/%s/%s/%s.%s' % (HWIOS.config.get('general','uri'),tms_config.getint('service','port'), ztop ,old_xy[0],old_xy[1],tms_config.get('map','format'))
                else:
                    image_loc = 'http://%s:%s/tiles/%s/%s/%s.%s' % (HWIOS.config.get('general','uri'),tms_config.getint('service','port'), ztop ,old_xy[0],old_xy[1],tms_config.get('map','format'))
            else:
                image_loc = 'http://%s:%s/index.php?method=regionImage%s' % (service_client['client'].peer.host, service_client['service']['port'], region_uuid.replace('-', ''))
            queued = Maps.render_cell(params['sim_location_x'],params['sim_location_y'],image_loc)
            pb_client = HWIOS.pb_server.search_client(params['service'])
            watchdog = yield pb_client.switch_watchdog(params['service'],'TRIGGER')            
            result = yield HWIOS.pb_server.radmin_proxy(params['service'],'admin_shutdown',radmin_params)
            client_response, tpl_params = self._get_regions(client)
            if 'error' in result:
                if result['error'] == 'SIM_OFFLINE': 
                    client_response.update({'status': {
                        'code':'REGION_UPDATED',
                        'i18n':_('Updated region in offline simulator!'),
                        'type': HWIOS.ws_realm._t['notify-info']
                        }
                    })
                else: 
                    client_response.update({'status': {
                        'code':result['error'],
                        'i18n':_(result['error']),
                        'type': HWIOS.ws_realm._t['notify-error']
                        }
                    })
            else: 
                client_response.update({'status': {
                    'code':'REGION_UPDATED',
                    'i18n':_('Region updated. Region service restarting with watchdog...'),
                    'type': HWIOS.ws_realm._t['notify-info']
                    }
                })
            notify_others(client, client_response,'/opensim/regions/modified/', '^/opensim/regions/$', tpl_params)
            publish_activity(client.profile, _('Region modified'),'/opensim/regions/',[0,0,4,0,0])
            defer.returnValue(client_response)
Пример #4
0
 def _map_cb(params, region_uuid):
     service_client = HWIOS.pb_server.search_service(params['service'])
     image_loc = 'http://%s:%s/index.php?method=regionImage%s' % (service_client['client'].peer.host, service_client['service']['port'], region_uuid.replace('-', ''))
     queued = Maps.render_cell(params['sim_location_x'],params['sim_location_y'],image_loc)