コード例 #1
0
		public static void SendRequest ()
		{
			Entity entity = new Entity ();
			entity.id = "regions";
			ActorSystem.instance.FindRemote ("GameMachine/GameSystems/RegionService").Tell (entity);
			//Logger.Debug ("Send region request");
		}
コード例 #2
0
        public void SendEntity(Entity entity)
        {
            List <Entity> entities = new List <Entity> ();

            entities.Add(entity);
            SendEntities(entities);
        }
コード例 #3
0
        public override void OnReceive(object message)
        {
            Entity entity = message as Entity;

            if (entity.chatInvite != null)
            {
                inviteReceived(entity.chatInvite);
            }

            if (entity.chatChannels != null)
            {
                processChannels(entity.chatChannels);
            }

            if (entity.chatMessage != null)
            {
                if (messageReceived != null)
                {
                    messageReceived(entity.chatMessage);
                }

                if (entity.chatMessage.message == "dynamic_message")
                {
                    string channelName = entity.chatMessage.chatChannel.name;
                    if (dynamicMessageCallbacks.ContainsKey(channelName))
                    {
                        dynamicMessageCallbacks [channelName] (entity.chatMessage.dynamicMessage);
                    }
                }
            }
        }
コード例 #4
0
ファイル: Messenger.cs プロジェクト: gamemachine/gamemachine
 // Tells the chat system to send you a complete list of channels you are subscribed to.
 //  If you joined a channel with the subscribers flag set, you will also get back a full
 // list of subscribers for that channel.
 public void ChatStatus()
 {
     Entity entity = new Entity ();
     entity.id = "chat_status";
     entity.chatStatus = new ChatStatus ();
     actorSystem.FindRemote ("default").Tell (entity);
 }
コード例 #5
0
        // Use this if you want to create your own ChatMessage.
        // This is useful if you want to embed other data besides text.
        //  Do this by attaching an entity to the ChatMessage.
        public void SendChatMessage(ChatMessage message)
        {
            Entity entity = new Entity();

            entity.id          = "chatmessage";
            entity.chatMessage = message;
            actorSystem.FindRemote("default").Tell(entity);
        }
コード例 #6
0
        // Tells the chat system to send you a complete list of channels you are subscribed to.
        //  If you joined a channel with the subscribers flag set, you will also get back a full
        // list of subscribers for that channel.
        public void ChatStatus()
        {
            Entity entity = new Entity();

            entity.id         = "chat_status";
            entity.chatStatus = new ChatStatus();
            actorSystem.FindRemote("default").Tell(entity);
        }
コード例 #7
0
        public static void SendRequest()
        {
            Entity entity = new Entity();

            entity.id = "regions";
            ActorSystem.instance.FindRemote("GameMachine/GameSystems/RegionService").Tell(entity);
            //Logger.Debug ("Send region request");
        }
コード例 #8
0
ファイル: RemoteEcho.cs プロジェクト: gamemachine/gamemachine
 public Entity EchoMessage(string id)
 {
     Entity entity = new Entity ();
     entity.id = id;
     EchoTest echoTest = new EchoTest ();
     echoTest.message = id;
     entity.echoTest = echoTest;
     return entity;
 }
コード例 #9
0
        public Entity EchoMessage(string id)
        {
            Entity entity = new Entity();

            entity.id = id;
            EchoTest echoTest = new EchoTest();

            echoTest.message = id;
            entity.echoTest  = echoTest;
            return(entity);
        }
コード例 #10
0
        public override void OnReceive(object message)
        {
            Entity entity = message as Entity;

            if (!String.IsNullOrEmpty(destination) && destination != "default")
            {
                entity.destination = destination;
            }

            actorSystem.TellRemote(entity);
        }
コード例 #11
0
        public void leaveChannel(string channelName)
        {
            Entity entity = new Entity();

            entity.id = "chatjoin";
            LeaveChat   leaveChat   = new LeaveChat();
            ChatChannel chatChannel = new ChatChannel();

            chatChannel.name = channelName;
            leaveChat.chatChannel.Add(chatChannel);
            entity.leaveChat = leaveChat;
            actorSystem.FindRemote("default").Tell(entity);
            subscribers.Remove(channelName);
        }
コード例 #12
0
        public void InviteToChannel(string playerId, string invitee, string channelName)
        {
            ChatInvite chatInvite = new ChatInvite();

            chatInvite.invitee     = invitee;
            chatInvite.inviter     = playerId;
            chatInvite.channelName = channelName;
            chatInvite.invite_id   = "0";

            Entity entity = new Entity();

            entity.id         = "chatinvite";
            entity.chatInvite = chatInvite;
            actorSystem.FindRemote("default").Tell(entity);
        }
コード例 #13
0
        public override void OnReceive(object message)
        {
            Entity entity = message as Entity;

            if (entity.regions != null)
            {
                List <string> r;
                List <string> regionServer;
                r = new List <string> (entity.regions.regions.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
                foreach (string region in r)
                {
                    regionServer = new List <string> (region.Split("=".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
                    regions [regionServer [0]] = regionServer [1];
                    //Logger.Debug ("adding region " + regionServer [0] + " = " + regionServer [1]);
                }
            }
        }
コード例 #14
0
        // senderId = sending player id
        // channelName = chat channel
        // messageText = chat text
        // messageType = group or private
        public void SendText(string senderId, string channelName, string messageText, string messageType)
        {
            Entity entity = new Entity();

            entity.id = "chatmessage";

            ChatMessage chatMessage = new ChatMessage();
            ChatChannel chatChannel = new ChatChannel();

            chatChannel.name        = channelName;
            chatMessage.chatChannel = chatChannel;
            chatMessage.message     = messageText;
            chatMessage.type        = messageType;
            chatMessage.senderId    = senderId;
            entity.chatMessage      = chatMessage;
            actorSystem.FindRemote("default").Tell(entity);
        }
コード例 #15
0
        public void SendGameMessages()
        {
            if (reliableMessages.Count >= 1)
            {
                foreach (ReliableMessage reliableMessage in reliableMessages.Values)
                {
                    if (reliableMessage.attempts >= reliableMessage.maxAttempts)
                    {
                        reliableMessageIds.Add(reliableMessage.gameMessage.messageId);
                    }
                    else if (reliableMessage.currentTime() - reliableMessage.lastUpdate > 1000.0f)
                    {
                        reliableMessage.attempts++;
                        reliableMessage.lastUpdate = reliableMessage.currentTime();
                        gameMessages.Add(reliableMessage.gameMessage);
                        Debug.Log("ReliableMessage attempt " + reliableMessage.attempts);
                    }
                }

                foreach (String messageId in reliableMessageIds)
                {
                    Debug.Log("Giving up on reliableMessage " + messageId);
                    reliableMessages.Remove(messageId);
                }

                reliableMessageIds.Clear();
            }

            if (gameMessages.Count >= 1)
            {
                Entity entity = new Entity();
                entity.id           = "gm";
                entity.gameMessages = new GameMessages();
                foreach (GameMessage gameMessage in gameMessages)
                {
                    entity.gameMessages.gameMessage.Add(gameMessage);
                    if (gameMessage.messageId.Length != 0 && !reliableMessages.ContainsKey(gameMessage.messageId))
                    {
                        reliableMessages.Add(gameMessage.messageId, new ReliableMessage(gameMessage));
                    }
                }
                gameMessages.Clear();
                ActorSystem.instance.TellRemote(entity);
            }
        }
コード例 #16
0
        public void Update(TrackData trackData)
        {
            if (trackData == null) {
                return;
            }

            trackData.id = GameMachine.Core.User.Instance.username;
            if (trackData.entityType == null) {
                trackData.entityType = TrackData.EntityType.PLAYER;
            }

            Entity entity = new Entity ();
            entity.id = "0";
            entity.trackData = trackData;

            // Always regional
            ActorSystem.instance.FindRegional ("default").Tell (entity);
        }
コード例 #17
0
        public void SendDynamicMessage(string senderId, string channelName, object message, string messageType)
        {
            DynamicMessage dynamicMessage = DynamicMessageUtil.ToDynamicMessage(message);
            Entity         entity         = new Entity();

            entity.id = "dm";

            ChatMessage chatMessage = new ChatMessage();
            ChatChannel chatChannel = new ChatChannel();

            chatChannel.name        = channelName;
            chatMessage.chatChannel = chatChannel;
            chatMessage.message     = "dynamic_message";
            chatMessage.type        = messageType;
            chatMessage.senderId    = senderId;

            chatMessage.dynamicMessage = dynamicMessage;

            entity.chatMessage = chatMessage;
            actorSystem.FindRemote("default").Tell(entity);
        }
コード例 #18
0
        public override void OnReceive(object message)
        {
            Entity entity = message as Entity;

            if (entity.echoTest != null)
            {
                if (entity.id == "cluster")
                {
                    if (echoReceived != null)
                    {
                        echoReceived();
                    }
                }
                else if (entity.id == "region")
                {
                    if (regionEchoReceived != null)
                    {
                        regionEchoReceived();
                    }
                }
            }
        }
コード例 #19
0
        // flags is a pipe separated list of strings.  Currently subscribers is the only flag recognized
        //  If the subscribers flag is set, the status updates from the server will include a list of subscribers
        // in each channel, instead of just the channel name.
        public void JoinChannel(string channelName, string flags, string inviteId)
        {
            if (channelSubscriptions.Contains(channelName))
            {
                return;
            }

            Entity entity = new Entity();

            entity.id = "chatjoin";
            JoinChat    joinChat    = new JoinChat();
            ChatChannel chatChannel = new ChatChannel();

            chatChannel.name  = channelName;
            chatChannel.flags = flags;
            if (inviteId != null)
            {
                chatChannel.invite_id = inviteId;
            }
            joinChat.chatChannel.Add(chatChannel);
            entity.joinChat = joinChat;
            actorSystem.FindRemote("default").Tell(entity);
        }
コード例 #20
0
ファイル: ActorSystem.cs プロジェクト: tiger0-0/gamemachine
        public void DeliverByComponent(Entity entity)
        {
            MethodInfo method;
            bool findFailed;

            foreach (UntypedActor actor in actors.Values) {

                List<List<string>> componentSets = actor.GetComponentSets();
                foreach (List<string> componentSet in componentSets) {

                    // See if message contains component set
                    findFailed = false;
                    foreach (string component in componentSet) {
                        if (methods.ContainsKey(component)) {
                            method = methods[component];

                            if (method.Invoke(entity, null) == null) {
                                findFailed = true;

                            } else {
                                //Logger.Debug("Found component " + component);
                            }
                        } else {
                            Logger.Debug("Bad Component " + component);
                        }

                    }

                    if (!findFailed) {
                        actor.Tell(entity);
                        findFailed = false;
                        break;
                    }
                }
            }
        }
コード例 #21
0
ファイル: NetworkFields.cs プロジェクト: tiger0-0/gamemachine
            private void SetRemoteInt(InputData inputData, int value)
            {
                if (inputData.source == NetworkFields.Source.TrackData) {
                    inputData.remoteField.SetValue(trackData, value, null);
                } else {
                    TrackData td;
                    if (inputData.broadcast) {
                        if (NetworkSettings.instance == null) {
                            return;
                        }
                        td = new TrackData();
                        td.broadcast = 1;
                        td.userDefinedData = new UserDefinedData();
                        inputData.remoteField.SetValue(td.userDefinedData, value, null);
                        trackData.id = NetworkSettings.instance.username;
                        io.gamemachine.messages.Entity entity = new io.gamemachine.messages.Entity();
                        entity.id = "0";
                        entity.trackData = trackData;
                        ActorSystem.instance.client.SendEntity(entity);
                    } else {
                        inputData.remoteField.SetValue(trackData.userDefinedData, value, null);
                    }

                }
            }
コード例 #22
0
ファイル: Messenger.cs プロジェクト: gamemachine/gamemachine
        public void InviteToChannel(string playerId, string invitee, string channelName)
        {
            ChatInvite chatInvite = new ChatInvite ();
            chatInvite.invitee = invitee;
            chatInvite.inviter = playerId;
            chatInvite.channelName = channelName;
            chatInvite.invite_id = "0";

            Entity entity = new Entity ();
            entity.id = "chatinvite";
            entity.chatInvite = chatInvite;
            actorSystem.FindRemote ("default").Tell (entity);
        }
コード例 #23
0
 public void SendEntity(Entity entity)
 {
     clientMessage.entity.Add (entity);
     Send (Serialize (clientMessage));
     clientMessage.entity.Clear ();
 }
コード例 #24
0
ファイル: Messenger.cs プロジェクト: gamemachine/gamemachine
        // senderId = sending player id
        // channelName = chat channel
        // messageText = chat text
        // messageType = group or private
        public void SendText(string senderId, string channelName, string messageText, string messageType)
        {
            Entity entity = new Entity ();
            entity.id = "chatmessage";

            ChatMessage chatMessage = new ChatMessage ();
            ChatChannel chatChannel = new ChatChannel ();
            chatChannel.name = channelName;
            chatMessage.chatChannel = chatChannel;
            chatMessage.message = messageText;
            chatMessage.type = messageType;
            chatMessage.senderId = senderId;
            entity.chatMessage = chatMessage;
            actorSystem.FindRemote ("default").Tell (entity);
        }
コード例 #25
0
ファイル: Messenger.cs プロジェクト: gamemachine/gamemachine
        public void SendDynamicMessage(string senderId, string channelName, object message, string messageType)
        {
            DynamicMessage dynamicMessage = DynamicMessageUtil.ToDynamicMessage (message);
            Entity entity = new Entity ();
            entity.id = "dm";

            ChatMessage chatMessage = new ChatMessage ();
            ChatChannel chatChannel = new ChatChannel ();
            chatChannel.name = channelName;
            chatMessage.chatChannel = chatChannel;
            chatMessage.message = "dynamic_message";
            chatMessage.type = messageType;
            chatMessage.senderId = senderId;

            chatMessage.dynamicMessage = dynamicMessage;

            entity.chatMessage = chatMessage;
            actorSystem.FindRemote ("default").Tell (entity);
        }
コード例 #26
0
ファイル: Messenger.cs プロジェクト: gamemachine/gamemachine
 // Use this if you want to create your own ChatMessage.
 // This is useful if you want to embed other data besides text.
 //  Do this by attaching an entity to the ChatMessage.
 public void SendChatMessage(ChatMessage message)
 {
     Entity entity = new Entity ();
     entity.id = "chatmessage";
     entity.chatMessage = message;
     actorSystem.FindRemote ("default").Tell (entity);
 }
コード例 #27
0
ファイル: Messenger.cs プロジェクト: gamemachine/gamemachine
 public void leaveChannel(string channelName)
 {
     Entity entity = new Entity ();
     entity.id = "chatjoin";
     LeaveChat leaveChat = new LeaveChat ();
     ChatChannel chatChannel = new ChatChannel ();
     chatChannel.name = channelName;
     leaveChat.chatChannel.Add (chatChannel);
     entity.leaveChat = leaveChat;
     actorSystem.FindRemote ("default").Tell (entity);
     subscribers.Remove (channelName);
 }
コード例 #28
0
ファイル: Messenger.cs プロジェクト: gamemachine/gamemachine
        // flags is a pipe separated list of strings.  Currently subscribers is the only flag recognized
        //  If the subscribers flag is set, the status updates from the server will include a list of subscribers
        // in each channel, instead of just the channel name.
        public void JoinChannel(string channelName, string flags, string inviteId)
        {
            if (channelSubscriptions.Contains (channelName)) {
                return;
            }

            Entity entity = new Entity ();
            entity.id = "chatjoin";
            JoinChat joinChat = new JoinChat ();
            ChatChannel chatChannel = new ChatChannel ();
            chatChannel.name = channelName;
            chatChannel.flags = flags;
            if (inviteId != null) {
                chatChannel.invite_id = inviteId;
            }
            joinChat.chatChannel.Add (chatChannel);
            entity.joinChat = joinChat;
            actorSystem.FindRemote ("default").Tell (entity);
        }
コード例 #29
0
 public void SendEntity(Entity entity)
 {
     List<Entity> entities = new List<Entity> ();
     entities.Add (entity);
     SendEntities (entities);
 }
コード例 #30
0
ファイル: ActorSystem.cs プロジェクト: tiger0-0/gamemachine
 public void DeliverByDestination(Entity entity)
 {
     UntypedActor actor = Find(entity.destination);
     if (actor.GetType().Name == "DeadLetters") {
         Logger.Debug("Incoming entity has invalid destination: " + entity.destination);
     } else {
         actor.Tell(entity);
     }
 }
コード例 #31
0
ファイル: ActorSystem.cs プロジェクト: tiger0-0/gamemachine
        public void TellRemote(Entity entity)
        {
            if (sendImmediate) {
                if (client != null) {
                    client.SendEntity(entity);
                }
                return;
            }

            entities.Add(entity);
        }
コード例 #32
0
ファイル: ActorSystem.cs プロジェクト: tiger0-0/gamemachine
        private void CreateMethodCache()
        {
            Entity entity = new Entity();
            foreach (PropertyInfo info in entity.GetType().GetProperties()) {
                MethodInfo minfo = info.GetGetMethod();
                string name = info.Name;
                if (methods.ContainsKey(name)) {
                    //Debug.Log("Method " + name + " already registered");
                    methods.Remove(name);
                }
                methods.Add(name, minfo);

            }
        }
コード例 #33
0
        public void SendGameMessages()
        {
            if (reliableMessages.Count >= 1) {
                foreach (ReliableMessage reliableMessage in reliableMessages.Values) {
                    if (reliableMessage.attempts >= reliableMessage.maxAttempts) {
                        reliableMessageIds.Add (reliableMessage.gameMessage.messageId);
                    } else if (reliableMessage.currentTime () - reliableMessage.lastUpdate > 1000.0f) {
                        reliableMessage.attempts++;
                        reliableMessage.lastUpdate = reliableMessage.currentTime ();
                        gameMessages.Add (reliableMessage.gameMessage);
                        Debug.Log ("ReliableMessage attempt " + reliableMessage.attempts);
                    }
                }

                foreach (String messageId in reliableMessageIds) {
                    Debug.Log ("Giving up on reliableMessage " + messageId);
                    reliableMessages.Remove (messageId);
                }

                reliableMessageIds.Clear ();
            }

            if (gameMessages.Count >= 1) {
                Entity entity = new Entity ();
                entity.id = "gm";
                entity.gameMessages = new GameMessages ();
                foreach (GameMessage gameMessage in gameMessages) {
                    entity.gameMessages.gameMessage.Add (gameMessage);
                    if (gameMessage.messageId.Length != 0 && !reliableMessages.ContainsKey (gameMessage.messageId)) {
                        reliableMessages.Add (gameMessage.messageId, new ReliableMessage (gameMessage));
                    }
                }
                gameMessages.Clear ();
                ActorSystem.instance.TellRemote (entity);
            }
        }