示例#1
0
        public XmlRpcResponse XmlRPCRegisterMessageServer(XmlRpcRequest request, IPEndPoint remoteClient)
        {
            // Check IP Endpoint Access
            if (!TrustManager.Instance.IsTrustedPeer(remoteClient))
            {
                return(Util.CreateTrustManagerAccessDeniedResponse());
            }

            XmlRpcResponse response     = new XmlRpcResponse();
            Hashtable      requestData  = (Hashtable)request.Params[0];
            Hashtable      responseData = new Hashtable();

            if (requestData.Contains("uri"))
            {
                string            URI     = (string)requestData["uri"];
                string            sendkey = (string)requestData["sendkey"];
                string            recvkey = (string)requestData["recvkey"];
                MessageServerInfo m       = new MessageServerInfo();
                m.URI     = URI;
                m.sendkey = sendkey;
                m.recvkey = recvkey;
                RegisterMessageServer(URI, m);
                responseData["responsestring"] = "TRUE";
                response.Value = responseData;
            }
            return(response);
        }
 public void DeRegisterMessageServer(MessageServerInfo m)
 {
     lock (m_messageServers)
     {
         if (m_messageServers.Contains(m))
         {
             m_messageServers.Remove(m);
         }
     }
 }
 public void RegisterMessageServer(MessageServerInfo m)
 {
     lock (m_messageServers)
     {
         if (!m_messageServers.Contains(m))
         {
             m_messageServers.Add(m);
         }
     }
 }
示例#4
0
 public void RegisterMessageServer(string URI, MessageServerInfo serverData)
 {
     lock (MessageServers)
     {
         if (!MessageServers.ContainsKey(URI))
         {
             MessageServers.Add(URI, serverData);
         }
     }
 }
示例#5
0
 public void AddResponsibleRegion(string URI, ulong regionhandle)
 {
     if (!MessageServers.ContainsKey(URI))
     {
         m_log.Warn("[MSGSERVER]: Got addResponsibleRegion Request for a MessageServer that isn't registered");
     }
     else
     {
         MessageServerInfo msginfo = MessageServers["URI"];
         msginfo.responsibleForRegions.Add(regionhandle);
         MessageServers["URI"] = msginfo;
     }
 }
示例#6
0
        public void ReceiveMessagesUdp()
        {
            byte[]   data     = new byte[1024];
            EndPoint endPoint = socketUdpHandler.LocalEndPoint;

            while (true)
            {
                int               amount            = socketUdpHandler.ReceiveFrom(data, ref endPoint);
                MemoryStream      messageContainer  = new MemoryStream(data, 0, data.Length);
                MessageServerInfo messageServerInfo =
                    (MessageServerInfo)messageSerializer.Deserialize(messageContainer,
                                                                     typeof(MessageServerInfo), null);
                ReceiveMessageHandler(messageServerInfo);
                return;
            }
        }
        void ReceiveMessage(GameMessage message)
        {
            if (!(message is MessageServerInfo))
            {
                return;
            }
            MessageServerInfo messageInfo = message as MessageServerInfo;
            Action            action      = delegate
            {
                tbIPAdress.Text     = messageInfo.IPAdress;
                tbPort.Text         = messageInfo.Port.ToString();
                tbMapName.Text      = messageInfo.MapName;
                tbParticipants.Text = messageInfo.CurrentPlayersAmount.ToString()
                                      + "/" + messageInfo.MaxPlayersAmount.ToString();
                lbStatus.Text = "Found";
            };

            isFoundServer = true;
            Invoke(action);
        }
        public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request, IPEndPoint remoteClient)
        {
            XmlRpcResponse response     = new XmlRpcResponse();
            Hashtable      requestData  = (Hashtable)request.Params[0];
            Hashtable      responseData = new Hashtable();

            if (requestData.Contains("uri"))
            {
                string            URI     = (string)requestData["uri"];
                string            sendkey = (string)requestData["sendkey"];
                string            recvkey = (string)requestData["recvkey"];
                MessageServerInfo m       = new MessageServerInfo();
                m.URI     = URI;
                m.sendkey = sendkey;
                m.recvkey = recvkey;
                DeRegisterMessageServer(m);
                responseData["responsestring"] = "TRUE";
                response.Value = responseData;
            }
            return(response);
        }
示例#9
0
        public static void HandleSearchMessage(MessageSearchRequest message)
        {
            while (gameLogic == null)
            {
                ;
            }
            MessageServerInfo messageResponse = new MessageServerInfo()
            {
                IPAdress             = NetworkInfo.GetCurrentIP().ToString(),
                Port                 = Port,
                MaxPlayersAmount     = MaxUsersAmount,
                CurrentPlayersAmount = gameLogic.Players.Count,
                MapName              = "Level 1",
                MapWidth             = gameLogic.Map.Width,
                MapHeight            = gameLogic.Map.Height
            };
            Socket     socketSetAdress = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint endPoint        = new IPEndPoint(IPAddress.Parse(message.IPAdress), message.Port);

            socketSetAdress.SendTo(messageSerializer.Serialize(messageResponse, messageResponse.GetType()), endPoint);
        }
示例#10
0
        private void NotifyMessageServerAboutRegionShutdown(MessageServerInfo serv, UUID regionID)
        {
            Hashtable reqparams = new Hashtable();

            reqparams["sendkey"]  = serv.sendkey;
            reqparams["regionid"] = regionID.ToString();
            ArrayList SendParams = new ArrayList();

            SendParams.Add(reqparams);

            XmlRpcRequest GridReq = new XmlRpcRequest("process_region_shutdown", SendParams);

            try
            {
                GridReq.Send(serv.URI, 6000);
            }
            catch (WebException)
            {
                m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about region shutdown.");
            }
            m_log.Info("[REGION UPDOWN]: Notified : " + serv.URI + " about region state change");
        }
示例#11
0
        private void NotifyMessageServerAboutUserLogoff(MessageServerInfo serv, UUID agentID)
        {
            Hashtable reqparams = new Hashtable();

            reqparams["sendkey"] = serv.sendkey;
            reqparams["agentid"] = agentID.ToString();
            ArrayList SendParams = new ArrayList();

            SendParams.Add(reqparams);

            XmlRpcRequest GridReq = new XmlRpcRequest("logout_of_simulator", SendParams);

            try
            {
                GridReq.Send(serv.URI, 6000);
            }
            catch (WebException)
            {
                m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about log out.  Other users might still think this user is online");
            }
            m_log.Info("[LOGOUT]: Notified : " + serv.URI + " about user logout");
        }
示例#12
0
        private void NotifyMessageServerAboutUser(MessageServerInfo serv,
                                                  UUID agentID, UUID sessionID, UUID RegionID,
                                                  ulong regionhandle, float positionX, float positionY, float positionZ,
                                                  string firstname, string lastname)
        {
            Hashtable reqparams = new Hashtable();

            reqparams["sendkey"]      = serv.sendkey;
            reqparams["agentid"]      = agentID.ToString();
            reqparams["sessionid"]    = sessionID.ToString();
            reqparams["regionid"]     = RegionID.ToString();
            reqparams["regionhandle"] = regionhandle.ToString();
            reqparams["positionx"]    = positionX.ToString();
            reqparams["positiony"]    = positionY.ToString();
            reqparams["positionz"]    = positionZ.ToString();
            reqparams["firstname"]    = firstname;
            reqparams["lastname"]     = lastname;

            //reqparams["position"] = Position.ToString();

            ArrayList SendParams = new ArrayList();

            SendParams.Add(reqparams);

            string        methodName = "login_to_simulator";
            XmlRpcRequest GridReq    = new XmlRpcRequest(methodName, SendParams);

            try
            {
                GridReq.Send(Util.XmlRpcRequestURI(serv.URI, methodName), 6000);
                m_log.Info("[LOGIN]: Notified : " + serv.URI + " about user login");
            }
            catch (WebException)
            {
                m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about login.  Presence might be borked for this user");
            }
        }