예제 #1
0
        public Guid BeginHostGame(Guid gameid, Version gameVersion, string gamename,
                                  string gameIconUrl, string password, string actualgamename, Version sasVersion, bool specators)
        {
            var hgr = new HostGameRequest(gameid, gameVersion, gamename, actualgamename, gameIconUrl, password ?? "", sasVersion, specators);

            Log.InfoFormat("BeginHostGame {0}", hgr);
            var m = new Message(new Jid(AppConfig.Instance.GameServUsername, AppConfig.Instance.ServerPath, null), this.Xmpp.MyJID, MessageType.normal, "", "hostgame");

            m.GenerateId();
            m.AddChild(hgr);
            this.Xmpp.Send(m);
            return(hgr.RequestId);
        }
예제 #2
0
        public void SetTopic(string topic)
        {
            if (!IsGroupChat || GroupUser == null)
            {
                return;
            }
            var m = new Message(GroupUser.User.Bare, MessageType.groupchat, "", topic);

            m.GenerateId();
            m.XEvent           = new Event();
            m.XEvent.Delivered = true;
            m.XEvent.Displayed = true;
            _client.Send(m);
        }
예제 #3
0
        public void SendMessage(string message)
        {
            NewUser to;

            to = IsGroupChat ? GroupUser : Users.SingleOrDefault(x => x.User.Bare != _client.Me.User.Bare);
            if (to == null || String.IsNullOrWhiteSpace(message))
            {
                return;
            }

            if (message[0] == '/')
            {
                message = message.Substring(1);
                var mend    = message.IndexOf(' ');
                var command = message.Substring(0, mend).ToLower();
                var mess    = "";
                if (message.Length > command.Length + 1)
                {
                    mess = message.Substring(mend + 1);
                }
                switch (command)
                {
                case "topic":
                {
                    SetTopic(mess);
                    break;
                }
                }
            }
            else
            {
                var j = new Jid(to.User);
                var m = new Message(j, (IsGroupChat) ? MessageType.groupchat : MessageType.chat, message);
                m.GenerateId();
                m.XEvent           = new Event();
                m.XEvent.Delivered = true;
                m.XEvent.Displayed = true;
                _client.Send(m);
            }
        }
예제 #4
0
파일: Client.cs 프로젝트: Himorask/OCTGN
        public void BeginGetGameList() 
        {
			var m = new Message(new Jid("gameserv@" + Host), MessageType.normal, "", "gamelist");
            m.GenerateId();
            Xmpp.Send(m);
        }
예제 #5
0
파일: Client.cs 프로젝트: Himorask/OCTGN
        public void BeginHostGame(Game game, string gamename)
        {
            var data = String.Format("{0},:,{1},:,{2}",game.Id.ToString(),game.Version.ToString(),gamename);
			var m = new Message(new Jid("gameserv@" + Host), Me.User, MessageType.normal, data, "hostgame");
            m.GenerateId();
            Xmpp.Send(m);
        }
예제 #6
0
 public Guid BeginHostGame(Guid gameid, Version gameVersion, string gamename,
     string gameIconUrl, string password, string actualgamename, Version sasVersion, bool specators)
 {
     var hgr = new HostGameRequest(gameid, gameVersion, gamename, actualgamename, gameIconUrl, password ?? "", sasVersion, specators);
     Log.InfoFormat("BeginHostGame {0}", hgr);
     var m = new Message(new Jid(AppConfig.Instance.GameServUsername, AppConfig.Instance.ServerPath, null), this.Xmpp.MyJID, MessageType.normal, "", "hostgame");
     m.GenerateId();
     m.AddChild(hgr);
     this.Xmpp.Send(m);
     return hgr.RequestId;
 }
예제 #7
0
파일: GameBot.cs 프로젝트: Gondulf/OCTGN
 private static void XmppOnOnMessage(object sender , Message msg)
 {
     switch(msg.Type)
     {
         case MessageType.normal:
             if(msg.Subject == "hostgame")
             {
                 var data = msg.Body.Split(new string[1]{",:,"},StringSplitOptions.RemoveEmptyEntries);
                 if (data.Length != 3) return;
                 var guid = Guid.Empty;
                 Version ver = null;
                 if (String.IsNullOrWhiteSpace(data[2])) return;
                 var gameName = data[2];
                 if(Guid.TryParse(data[0] , out guid) && Version.TryParse(data[1] , out ver))
                 {
                     var port = Gaming.HostGame(guid , ver , gameName , "" , new NewUser(msg.From));
                     if (port == -1) return;
                     var m = new Message(msg.From , msg.To , MessageType.normal , port.ToString() , "gameready");
                     m.GenerateId();
                     Xmpp.Send(m);
                     var gameMessage = String.Format(" {0} is hosting a game called '{1}'" ,msg.From.User,gameName);
                     m = new Message(new Jid("lobby@conference." + ServerPath), msg.To, MessageType.groupchat, gameMessage);
                     //Xmpp.Send(m);
                     //RefreshLists();
                 }
             }
             else if(msg.Subject == "gamelist")
             {
                 //Trace.WriteLine("[Bot]Request GameList: " + msg.From.User);
                 var list = Gaming.GetLobbyList().Where(x=>x.GameStatus == EHostedGame.StartedHosting);
                 var m = new Message(msg.From , MessageType.normal , "" , "gamelist");
                 m.GenerateId();
                 foreach (var a in list)
                 {
                     m.AddChild(a);
                 }
                 Xmpp.Send(m);
             }
             else if(msg.Subject == "gamestarted")
             {
                 int port = -1;
                 if(Int32.TryParse(msg.Body,out port))
                     Gaming.StartGame(port);
                 //RefreshLists();
             }
             break;
         case MessageType.error:
             break;
         case MessageType.chat:
             break;
         case MessageType.groupchat:
             break;
         case MessageType.headline:
             break;
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
예제 #8
0
파일: GameBot.cs 프로젝트: rerbes/OCTGN
        private void XmppOnOnMessage(object sender , Message msg)
        {
            try
            {
                switch (msg.Type)
                {
                    case MessageType.normal:
                        if (msg.Subject == "hostgame")
                        {

                            if (msg.HasChildElements == false)
                            {
                                // F it, someone screwed up this year.
                                return;
                            }

                            if (msg.ChildNodes.OfType<HostGameRequest>().Any() == false)
                            {
                                // Again, what the fuuuuu
                                return;
                            }

                            var req = msg.ChildNodes.OfType<HostGameRequest>().First();

                            Log.InfoFormat("Host game from {0}", msg.From);
                            while (SasUpdater.Instance.IsUpdating)
                            {
                                Thread.Sleep(100);
                            }
                            var id = GameManager.Instance.HostGame(req, new User(msg.From));

                            if(id != Guid.Empty)
                                userRequests.Add("hostrequest_" + id, id, DateTimeOffset.UtcNow.AddSeconds(30));
                        }
                        else if (msg.Subject == "gamelist")
                        {
                            // If someone tried to refresh their game list too soon, f them
                            if (userRequests.Contains("refreshrequest_" + msg.From.User.ToLower()))
                                return;
                            // Mark the user as already requested a list for the next 15 seconds
                            userRequests.Add("refreshrequest_" + msg.From.User.ToLower(), 1, DateTimeOffset.UtcNow.AddSeconds(15));
                            var list = GameManager.Instance.Games;
                            var m = new Message(msg.From, MessageType.normal, "", "gamelist");
                            m.GenerateId();
                            foreach (var a in list)
                            {
                                m.AddChild(a);
                            }
                            Xmpp.Send(m);
                        }
                        else if (msg.Subject == "killgame")
                        {
                            var items = msg.Body.Split(new[]{"#:999:#"}, StringSplitOptions.RemoveEmptyEntries);
                            if (items.Length != 2) return;
                            var client = new ApiClient();
                            var res = client.Login(msg.From.User, items[1]);
                            if (res == LoginResult.Ok)
                            {
                                var id = Guid.Parse(items[0]);
                                GameManager.Instance.KillGame(id);
                            }
                            throw new Exception("Error verifying user " + res);
                        }
                        break;
                    case MessageType.error:
                        break;
                    case MessageType.chat:
                        if (!msg.From.User.Equals("d0c", StringComparison.InvariantCultureIgnoreCase)) return;
                        // Keep this around in case we want to add commands at some point, we'll have an idea on how to write the code
                        //if (msg.Body.Equals("pause"))
                        //{
                        //    _isPaused = true;
                        //    Log.Warn(":::::: PAUSED ::::::");
                        //    var m = new Message(msg.From, MessageType.chat, "Paused");
                        //    m.GenerateId();
                        //    Xmpp.Send(m);
                        //}
                        break;
                }

            }
            catch (Exception e)
            {
                Log.Error("[Bot]XmppOnOnMessage Error",e);
            }
        }
예제 #9
0
파일: GameBot.cs 프로젝트: rerbes/OCTGN
 public void SendGameReady(HostedGameData game)
 {
     var m = new Message(game.Username + "@of.octgn.net", MessageType.normal, "", "gameready");
     m.GenerateId();
     m.AddChild(game);
     Xmpp.Send(m);
 }
예제 #10
0
        public void OnGameHostResponse(HostedGameData data)
        {
            if (_waitingRequestId != data.Id)
                return;
            lock (_users)
            {
				Log.InfoFormat("[{0}] Got Hosted Game Data {1}",this,data);
                if (State != MatchmakingQueueState.WaitingForHostedGame)
                {
                    // Actually this can happen if someone cancels out of the queue
                    //Log.Fatal("Timeed out before hosted game could be returned. Need to increase timeout.");
                    //this._hostGameTimeout.When = new TimeSpan(0,0,(int)_hostGameTimeout.When.TotalSeconds + 5);
                    return;
                }
                // Send all users a message telling them the info they need to connect to game server
                // Kick all the users from the queue.
                var message = new Message(new Jid("*****@*****.**"), MessageType.normal, "", "gameready");
                message.ChildNodes.Add(data);
				Log.InfoFormat("[{0}] Sending users game data",this);
                foreach (var u in _users.Where(x => x.IsInReadyQueue).ToArray())
                {
                    message.To = u.JidUser;
                    message.GenerateId();
                    this.Bot.Xmpp.Send(message);
                    _users.Remove(u);
                }
                // set time to game
                AverageTime.Cycle();
                State = MatchmakingQueueState.WaitingForUsers;
            }
        }
예제 #11
0
파일: GameBot.cs 프로젝트: Kamalisk/OCTGN
 private static void XmppOnOnMessage(object sender , Message msg)
 {
     switch(msg.Type)
     {
         case MessageType.normal:
             if(msg.Subject == "hostgame")
             {
                 if (isPaused)
                 {
                     messageQueue.Enqueue(msg);
                     return;
                 }
                 var data = msg.Body.Split(new string[1]{",:,"},StringSplitOptions.None);
                 if (data.Length != 4) return;
                 var guid = Guid.Empty;
                 Version ver = null;
                 if (String.IsNullOrWhiteSpace(data[2])) return;
                 var gameName = data[2];
                 var password = data[3];
                 if(Guid.TryParse(data[0] , out guid) && Version.TryParse(data[1] , out ver))
                 {
                     var port = Gaming.HostGame(guid , ver , gameName , password , new Lobby.User(msg.From));
                     if (port == -1) return;
                     var m = new Message(msg.From , msg.To , MessageType.normal , port.ToString() , "gameready");
                     m.GenerateId();
                     Xmpp.Send(m);
                 }
             }
             else if(msg.Subject == "gamelist")
             {
                 if (isPaused)
                 {
                     messageQueue.Enqueue(msg);
                     return;
                 }
                 var list = Gaming.GetLobbyList().Where(x=>x.GameStatus == EHostedGame.StartedHosting);
                 var m = new Message(msg.From , MessageType.normal , "" , "gamelist");
                 m.GenerateId();
                 foreach (var a in list)
                 {
                     m.AddChild(a);
                 }
                 Xmpp.Send(m);
             }
             else if (msg.Subject == "gamestarted")
             {
                 if (isPaused)
                 {
                     messageQueue.Enqueue(msg);
                     return;
                 }
                 int port = -1;
                 if (Int32.TryParse(msg.Body, out port)) Gaming.StartGame(port);
             }
             break;
         case MessageType.error:
             break;
         case MessageType.chat:
                 if (!msg.From.User.Equals("d0c", StringComparison.InvariantCultureIgnoreCase)) return;
                 if (msg.Body.Equals("pause"))
                 {
                     isPaused = true;
                     Console.WriteLine(":::::: PAUSED ::::::");
                     var m = new Message(msg.From, MessageType.chat, "Paused");
                     m.GenerateId();
                     Xmpp.Send(m);
                 }
                 else if (msg.Body.Equals("unpause"))
                 {
                     isPaused = false;
                     Console.WriteLine("Unpausing...");
                     var m = new Message(msg.From, MessageType.chat, "Unpausing");
                     m.GenerateId();
                     Xmpp.Send(m);
                     while (messageQueue.Count > 0)
                     {
                         XmppOnOnMessage(null,messageQueue.Dequeue());
                     }
                     Console.WriteLine(":::::: UNPAUSED ::::::");
                     var m2 = new Message(msg.From, MessageType.chat, "UnPaused");
                     m2.GenerateId();
                     Xmpp.Send(m2);
                 }
             break;
         case MessageType.groupchat:
             break;
         case MessageType.headline:
             break;
         default:
             throw new ArgumentOutOfRangeException();
     }
 }