예제 #1
0
        public override void OnTcpReceived(int dataType, byte[] data)
        {
            if (dataType == Walker.DataType.ResponseObjectDestroy)
            {
                string hash = null;
                Buffer.Read(data, br => hash = br.ReadString());
                RemoveGameObject(SyncWorldObjects.Find(go => go.Hash == hash));
            }
            else if (dataType == Walker.DataType.ResponseItemUsed)
            {
                var obj = Util.DeserializeJsonBinary <NwWalkerGameObject>(data);
                ItemUse(obj, worldData.Players.Find(p => p.UserID == obj.UserID), true);
            }
            else if (dataType == Walker.DataType.ResponseObjectPut)
            {
                var obj = Util.DeserializeJsonBinary <NwWalkerGameObject>(data);
                PutGameObject(obj, true);
            }
            else if (dataType == Walker.DataType.ResponsePlayerJoin)
            {
                var player = Util.DeserializeJsonBinary <WalkerPlayer>(data);

                if (worldData.Players.Exists(p => p.SessionID == player.SessionID))
                {
                    return;
                }
                JoinPlayer(player);
            }
            else if (dataType == Walker.DataType.ResponseWorldStatus)
            {
                var status = Util.DeserializeJsonBinary <NwWorldStatus>(data);
                ResolveReceiveWorldStatus(status);
            }
            else if (dataType == Walker.DataType.ResponseLeaveWorld)
            {
                server.Disconnected -= Server_Disconnected;
                OnUnload();
            }
        }