Ejemplo n.º 1
0
        private void CreateGameImpl(CreateGameReq req, CreateGameResp resp)
        {
            Team     owner    = Server.TeamRegistry.GetTeam(req.Auth.TeamName);
            GameInfo gameInfo = Server.GameManager.CreateGame(owner);

            resp.GameInfo = new EnGameInfo(gameInfo);
        }
Ejemplo n.º 2
0
    void ParseAndProcess(NetPacket np)
    {
        INet parsedMsg = Messages.Parse(np.message_type, np.Content());

        // Read from message queue and process!
        // Send updates to each object.
        switch ((MsgType)np.message_type)
        {
        case MsgType.Multipart:
            Multipart mpmsg = (Multipart)parsedMsg;
            // 1. If this group doesn't exist, create it
            if (!this.multipart_cache.ContainsKey(mpmsg.GroupID))
            {
                this.multipart_cache[mpmsg.GroupID] = new Multipart[mpmsg.NumParts];
            }
            // 2. Insert message into group
            this.multipart_cache[mpmsg.GroupID][mpmsg.ID] = mpmsg;
            // 3. Check if all messages exist
            bool complete     = true;
            int  totalContent = 0;
            foreach (Multipart m in this.multipart_cache[mpmsg.GroupID])
            {
                if (m == null)
                {
                    complete = false;
                    break;
                }
                totalContent += m.Content.Length;
            }
            // 4. if so, group up bytes and call 'messages.parse' on the content
            if (complete)
            {
                byte[] content = new byte[totalContent];
                int    co      = 0;
                foreach (Multipart m in this.multipart_cache[mpmsg.GroupID])
                {
                    System.Buffer.BlockCopy(m.Content, 0, content, co, m.Content.Length);
                    co += m.Content.Length;
                }
                NetPacket newpacket = NetPacket.fromBytes(content);
                if (newpacket == null)
                {
                    Debug.LogError("Multipart message content parsing failed... we done goofed");
                }
                this.ParseAndProcess(newpacket);
            }
            // 5. clean up!
            break;

        case MsgType.LoginResp:
            LoginResp lr = ((LoginResp)parsedMsg);
            characters.Add(lr.Character);
            accounts.Add(lr.AccountID);
            break;

        case MsgType.CreateAcctResp:
            CreateAcctResp car = ((CreateAcctResp)parsedMsg);
            accounts.Add(car.AccountID);
            characters.Add(car.Character);
            break;

        case MsgType.ListGamesResp:
            ListGamesResp resp = ((ListGamesResp)parsedMsg);
            for (int j = 0; j < resp.IDs.Length; j++)
            {
                GameInstance ni = new GameInstance();
                ni.ID   = resp.IDs[j];
                ni.Name = resp.Names[j];
            }
            break;

        case MsgType.GameConnected:
            GameConnected gc = ((GameConnected)parsedMsg);
            // TODO: handle connecting to a game!
            break;

        case MsgType.CreateGameResp:
            CreateGameResp cgr = ((CreateGameResp)parsedMsg);
            GameInstance   gi  = new GameInstance();
            gi.Name     = cgr.Name;
            gi.ID       = cgr.Game.ID;
            gi.entities = cgr.Game.Entities;
            games.Add(gi);
            Debug.Log("Added game: " + gi.Name);
            break;

        case MsgType.GameMasterFrame:
            GameMasterFrame gmf = ((GameMasterFrame)parsedMsg);
            Debug.Log("masterframe for gameID:" + gmf.ID.ToString());
            for (int i = 0; i < games.Count; i++)
            {
                if (games[i].ID == gmf.ID)
                {
                    Debug.Log("Updating game entities");
                    games[i].entities = gmf.Entities;
                }
            }
            break;
        }
    }
Ejemplo n.º 3
0
// ParseNetMessage accepts input of raw bytes from a NetMessage. Parses and returns a Net message.
    public static INet Parse(ushort msgType, byte[] content)
    {
        INet    msg = null;
        MsgType mt  = (MsgType)msgType;

        switch (mt)
        {
        case MsgType.Multipart:
            msg = new Multipart();
            break;

        case MsgType.Heartbeat:
            msg = new Heartbeat();
            break;

        case MsgType.Connected:
            msg = new Connected();
            break;

        case MsgType.Disconnected:
            msg = new Disconnected();
            break;

        case MsgType.CreateAcct:
            msg = new CreateAcct();
            break;

        case MsgType.CreateAcctResp:
            msg = new CreateAcctResp();
            break;

        case MsgType.Login:
            msg = new Login();
            break;

        case MsgType.LoginResp:
            msg = new LoginResp();
            break;

        case MsgType.Character:
            msg = new Character();
            break;

        case MsgType.ListGames:
            msg = new ListGames();
            break;

        case MsgType.ListGamesResp:
            msg = new ListGamesResp();
            break;

        case MsgType.CreateGame:
            msg = new CreateGame();
            break;

        case MsgType.CreateGameResp:
            msg = new CreateGameResp();
            break;

        case MsgType.JoinGame:
            msg = new JoinGame();
            break;

        case MsgType.GameConnected:
            msg = new GameConnected();
            break;

        case MsgType.GameMasterFrame:
            msg = new GameMasterFrame();
            break;

        case MsgType.Entity:
            msg = new Entity();
            break;

        case MsgType.MovePlayer:
            msg = new MovePlayer();
            break;

        case MsgType.UseAbility:
            msg = new UseAbility();
            break;

        case MsgType.AbilityResult:
            msg = new AbilityResult();
            break;

        case MsgType.EndGame:
            msg = new EndGame();
            break;
        }
        MemoryStream ms = new MemoryStream(content);

        msg.Deserialize(new BinaryReader(ms));
        return(msg);
    }